设计模式第二篇笔记。主要是Bridge和Builder模式。感觉比较难。上课时一脸懵逼。orz

Builder

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

(使用场景:画高矮胖瘦的小人,过程都是画头身手脚,但具体如何画是不同的。)
Builder模式主要是用于创建一些复杂对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临复杂的变化。
Builder模式中很重要的一个类是Director,用它来控制建造过程,也用它来隔离用户与建造过程的关联。
Builder是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。
看一下Builder的结构图,如下
clipboard.png

图中,Builder是为创建一个Product对象的各个部件指定的抽象接口。(建造小人各个部分的抽象类)
ConcreteBuilder则是具体建造者,实现Builder接口,构造和装配各个部件。(具体实现画出小人的头身手脚各部分)
Product是产品角色。(具体的小人)
Director是指挥官,构建一个使用Builder接口的对象。(根据用户需求构建小人对象)

Birdge

将抽象部分与它的实现部分分离,使它们都可以独立地变化。

clipboard.png

//Implementor类
abstract class Implementor{
    public abstract void Operation();
}

//ConcreteImplementorA等派生类
class ConcreteImplementorA : Implementor{
    public override void Operation(){
        //具体实现
    }
}

class ConcreteImplementorB : Implementor{
    public override void Operation(){
        //具体实现
    }
}

//Abstraction类
class Abstraction{
    protected Implementor implementor;
    
    public void SetImplementor(Implementor implementor){
        this.implementor = implementor;
    }
    
    public virtual void Operation(){
        implementor.Operation();
    }
}

//RefinedAbstraction类
class RefinedAbstraction : Abstraction{
    public override void Operation(){
        implementor.Operation();
    }
}

//Main
static void Main(string[] args){
    Abstraction ab = new RefinedAbstraction();
    
    ab.SetImplementor(new ConcreteImplementorA());
    ab.Operation();
    
    ab.SetImplementor(new ConcreteImplementorB());
    ab.Operation();
}

实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。


lsxj
1k 声望92 粉丝

因为热爱,所以执着。


« 上一篇
input 表单属性
下一篇 »
svg之<path>详解