码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式的一些日常记录

时间:2021-04-21 12:14:09      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:static   模板方法   strong   span   设计模式之禅   public   man   catch   col   

内容是看了设计模式之禅,然后自己写个文档总结到一起,便于查看。

 

单例模式:(程序运行过程中只能有一个类的对象)

  单例模式主要是对构造方法进行私有化 private,防止外部通过 new方法 创建实体类。针对该类中的方法尽量使用static修饰,便于访问。

public class Singleton {

    private static final Singleton singleton = new  Singleton();

    private Singleton(){ }

    //通过该方法获得实例对象
    public static Singleton getSigleton(){
        return singleton;
    }

    public static void  talk(){
        System.out.println("我被执行了");
    }

}


public class Client {

    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getSigleton();
        Singleton singleton2 = Singleton.getSigleton();
        System.out.println(singleton1 ==  singleton2);
        System.out.println(singleton1.equals(singleton2));
    }
}

执行结果:
true
true

 

工厂模式:定义:一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使类的实例化延迟到其子类。

  工厂模式主要是包含:工厂类(可以是抽象类,可以是接口,主要是用来定义有哪些方法),具体工厂类,产品类(可以是抽象类,可以是接口,主要是用来定义产品有哪些方法),产品实现类。只需要知道工厂类,实体类类名,就能获取到实体类对象,然后通多实体类对象调用实体中写的方法。

/**
 * 抽象产品类
 */
public abstract class Human {
    //不同种族的肤色不同
    public abstract void getColor();

    //不同种族语言不同
    public abstract void getTalk();

}

public class BlackHuman extends Human {


    @Override
    public void getColor() {
        System.out.println("黑色人种的皮肤是黑色的");
    }

    @Override
    public void getTalk() {
        System.out.println("黑色人种通用语言英语");
    }
}


public class YellowHuman extends Human {


    @Override
    public void getColor() {
        System.out.println("黄色人种的皮肤是黄色的");
    }

    @Override
    public void getTalk() {
        System.out.println("黄色人种通用语言是普通话");
    }
}


/**
 * 抽象人类创建工厂
 *
 */
public abstract class AbstractFactory {
    //获取人类对象
    public abstract <T extends Human> T createHuman(Class c);

}

/**
 * 具体工厂类
 */
public class HumanFactory extends AbstractFactory {

    @Override
    public <T extends Human> T createHuman(Class c) {
        //定义一个生产的人种
        Human  human = null;
        try {
            human = (T)(Class.forName(c.getName())).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return  (T)human;
    }
}

public class Client {
    public static void main(String[] args) {
        //创建一个人类工厂
        AbstractFactory factory = new HumanFactory();

        BlackHuman blackHuman = factory.createHuman(BlackHuman.class);
        blackHuman.getColor();
        blackHuman.getTalk();

        YellowHuman yellowHuman = factory.createHuman(YellowHuman.class);
        yellowHuman.getColor();
        yellowHuman.getTalk();
    }
}

 

 

抽象工厂模式:定义:一个用于创建一组相关或者相互依赖的对象提供一个接口,无需指定他们的具体实现类。

  在工厂模式的升级版

  主要是 有N产品族在抽象工厂中就有N个创建方法。有M个产品等级就应该有M个实现工厂类,在每个实现工厂中,实现不同产品族的生产任务。  

  代码待完成

 

 

模板模式:

  主要是抽象模板类定义方法,模板实现类集成模板方法。但是通用的方法写到抽象模板类方法中。(如算法 它的参数可以不同,但是执行的步骤相同。就可以提取出来,放到抽象模板类方法中。)

  代码待完成

 

设计模式的一些日常记录

标签:static   模板方法   strong   span   设计模式之禅   public   man   catch   col   

原文地址:https://www.cnblogs.com/cjxns/p/14678311.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!