设计模式 Day04 单例模式 适配器模式 组合模式

2021-02-27  本文已影响0人  望穿秋水小作坊
1. 如何判断你已经掌握了某种设计模式?(非常重要)

一、单例模式

1. 这个模式的意图是什么?它解决了什么问题、什么时候使用它
2. 它是如何解决的?掌握它的结构图,记住它的关键代码
class TaskManager
{
     private static TaskManager tm = null;
     private TaskManager() {……} //初始化窗口
     public void  displayProcesses() {……} //显示进程
     public void  displayServices() {……} //显示服务
     public static TaskManager getInstance()
     {
        if (tm == null)
        {
            tm = new TaskManager();
        }
        return tm;
    }
   ……
}
3. 至少能够想到它的两个应用实例,一个软件中的,一个生活中的
4. 这个模式的缺点是什么?在使用时要注意什么

二、适配器模式

1. 这个设计模式的意图是什么?它解决了什么问题、什么时候可以使用它
2. 它是如何解决的?掌握它的结构图,记住它的关键代码
class Adapter extends Target {
    private Adaptee adaptee; //维持一个对适配者对象的引用
    
    public Adapter(Adaptee adaptee) {
        this.adaptee=adaptee;
    }
    
    public void request() {
        adaptee.specificRequest(); //转发调用
    }
}
3. 至少能够想到它的两个应用实例,一个软件中的,一个生活中的
4. 这个模式的缺点是什么?在使用时要注意什么

三、组合模式

1. 这个设计模式的意图是什么?它解决了什么问题、什么时候可以使用它
2. 它是如何解决的?掌握它的结构图,记住它的关键代码
abstract class Component {
    public abstract void add(Component c); //增加成员
    public abstract void remove(Component c); //删除成员
    public abstract Component getChild(int i); //获取成员
    public abstract void operation();  //业务方法
}
class Leaf extends Component {
    public void add(Component c) { 
        //异常处理或错误提示 
    }   
        
    public void remove(Component c) { 
        //异常处理或错误提示 
    }
    
    public Component getChild(int i) { 
        //异常处理或错误提示
        return null; 
    }
    
    public void operation() {
        //叶子构件具体业务方法的实现
    } 
}
class Composite extends Component {
    private ArrayList<Component> list = new ArrayList<Component>();
    
    public void add(Component c) {
        list.add(c);
    }
    
    public void remove(Component c) {
        list.remove(c);
    }
    
    public Component getChild(int i) {
        return (Component)list.get(i);
    }
    
    public void operation() {
        //容器构件具体业务方法的实现
        //递归调用成员构件的业务方法
        for(Object obj:list) {
            ((Component)obj).operation();
        }
    }   
}
3. 至少能够想到它的两个应用实例,一个生活中的,一个软件中的
4. 这个模式的缺点是什么?在使用时要注意什么
上一篇 下一篇

猜你喜欢

热点阅读