随手记 设计模式

任务计划:     温习-泛型方法-委托
        学习-工厂模式
        ORM-框架工作原理
        反射实体JS
        设计模式

工厂模式:将所有实例化动作集中在一个对象里,在工厂里进行实例化时的准备动作。
有点:代码的整体性

抽象工厂:实例化对象是接口对象的子类,工厂也是接口工厂的子类,接口工厂内,定义实例化方法,工厂子类实现实例化方法
有点 :继承了工厂模式的有点,并且 加强了对 实例化对象的约束。
缺点:扩展比较麻烦


工厂模式分为工厂方法(factory method)和抽象工厂(abstract factory)
区别在于被创建对象的负责程度。
如果相关联的产品只有一个,那么不需要对工厂对象进行抽象了。使用工厂方法就可以了(即返回对象,根据传入的值然后生成不同的子类)。
如果关联的产品有多个,可以将工厂类进行抽象。让具体创建业务相关类的工作交给子类实现。


单例模式
饿汉模式和懒汉模式

适配器模式 adapter
讲一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器实现接口并实现不相关类的成员方法,实现方式:接口继承,类对象参数的方式传递进适配器,在适配器内实现类成员方法。
适配器模式,将接口和类进行功能组合。
/// <summary>
    /// 定义客户端期待的接口
    /// </summary>
    public class Target
    {
        /// <summary>
        /// 使用virtual修饰以便子类可以重写
        /// </summary>
        public virtual void Request()
        {
            Console.WriteLine("This is a common request");
        }
    }

    /// <summary>
    /// 定义需要适配的类
    /// </summary>
    public class Adaptee
    {
        public void SpecificRequest()
        {
            Console.WriteLine("This is a special request.");
        }
    }

    /// <summary>
    /// 定义适配器
    /// </summary>
    public class Adapter:Target
    {
        // 建立一个私有的Adeptee对象
        private Adaptee adaptee = new Adaptee();

        /// <summary>
        /// 通过重写,表面上调用Request()方法,变成了实际调用SpecificRequest()
        /// </summary>
        public override void Request()
        {
            adaptee.SpecificRequest();
        }
    }

class Program
    {
        static void Main(string[] args)
        {
            // 对客户端来说,调用的就是Target的Request()
            Target target = new Adapter();
            target.Request();

            Console.Read();
        }
    }


代理模式
为其他对象提供一种代理以控制对这个对象的访问。
又称委托模式。声明了购物动作接口,客户类继承接口实现购物动物,声明代理实现购物接口,客户调用代理(传参方式),代理实现购物动作。
代理模式有分为静态代理和动态代理
public interface IShop {
    /**
     * 买东西
     */
    void buy();
}

public class Customer implements IShop {
    public void buy() {
        System.out.println("买到了Nexus手机");
    }
}

public class Seller implements IShop {
    //持有一个被代理者的引用
    private IShop shop;

    public Seller(IShop shop) {

        this.shop = shop;
    }


    public void buy() {
        shop.buy();
    }
}

public class Client {
    public static void main(String[] args) {
        //静态代理
        //创建一个顾客对象
        IShop customer = new Customer();
        //创建一个代购者对象
        Seller seller = new Seller(customer);
        //进行购买操作
        seller.buy();
    }
}





代理与适配器:代理与适配器都属于一种衔接性质的功能。代理是一种原来对象的代表,其他需要与这个对象打交道的操作都与这个代表交涉。而适配器则不需要虚构出一个代表,只需要为应付特定使用的目的,将原来的类进行一些组合。

posted @ 2017-04-20 14:15  诗错り亦染  阅读(184)  评论(0)    收藏  举报