zoukankan      html  css  js  c++  java
  • 设计模式的一些日常记录

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

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

      单例模式主要是对构造方法进行私有化 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个实现工厂类,在每个实现工厂中,实现不同产品族的生产任务。  

    //抽象的产品类
    public abstract class AbstractProductA {
        //每个产品都有公共的方法
        public  void getProductName(){
            System.out.println("我是一个产品");
        }
    
        //每个产品相同方法,不同实现
        public abstract void doSomething();
    }
    
    
    //抽象的产品类
    public abstract class AbstractProductB {
        //每个产品都有公共的方法
        public  void getProductName(){
            System.out.println("我是一个产品B");
        }
    
        //每个产品相同方法,不同实现
        public abstract void doSomething();
    }
    
    
    public class ProductA1 extends AbstractProductA{
    
        @Override
        public void doSomething() {
            System.out.println("产品A1的实现方法");
        }
    }
    
    public class ProductA2 extends AbstractProductA {
        @Override
        public void doSomething() {
            System.out.println("产品A2的实现方法");
        }
    }
    
    
    public class ProductB1 extends AbstractProductB {
        @Override
        public void doSomething() {
            System.out.println("产品B1的实现方法");
        }
    }
    
    public class ProductB2 extends AbstractProductB {
        @Override
        public void doSomething() {
            System.out.println("产品B2的实现方法");
        }
    }
    
    /**
     * 有多少个产品族,在抽象工厂中就有多少个创建方法
     */
    public abstract class AbstractFactory {
    
        //创建A产品家族
        public abstract AbstractProductA createProductA();
        //创建B产品家族
        public abstract AbstractProductB createProductB();
    }
    
    
    //有多少产品等级就有多少实现工厂类
    //产品等级1的实现类
    public class Factory1 extends AbstractFactory {
        @Override
        public AbstractProductA createProductA() {
            return new ProductA1();
        }
    
        @Override
        public AbstractProductB createProductB() {
            return new ProductB1();
        }
    }
    
    //产品等级2的实现类
    public class Factory2 extends AbstractFactory {
        @Override
        public AbstractProductA createProductA() {
            return new ProductA2();
        }
    
        @Override
        public AbstractProductB createProductB() {
            return new ProductB2();
        }
    }
    
    
    public class Client {
        public static void main(String[] args) {
            //创建出两个工厂
            AbstractFactory factory1 = new Factory1();
            AbstractFactory factory2 = new Factory2();
            //产品A对象
            AbstractProductA a1 = factory1.createProductA();
            AbstractProductA a2 = factory2.createProductA();
    
            //产品B对象
            AbstractProductB b1 = factory1.createProductB();
            AbstractProductB b2 = factory2.createProductB();
    
            a1.doSomething();
            a2.doSomething();
            b1.doSomething();
            b2.doSomething();
        }
    }
    
    运行结果:
    产品A1的实现方法
    产品A2的实现方法
    产品B1的实现方法
    产品B2的实现方法

    模板模式:

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

      代码待完成

    建造者模式:类似于定义了一个算法,然后算法的步骤在于具体实现类,实现步骤不同会生成不同的对象。

      和工厂模式相似,建造者模式重在零件组装,工厂模式重在零件的创建。一个是组装方法步骤,一个是类的创建,不关注组装。

    代理模式:

  • 相关阅读:
    RUST实践.md
    redis.md
    opencvrust.md
    aws rds can't connect to mysql server on 'xx'
    Foundation ActionScript 3.0 With Flash CS3 And Flex
    Foundation Flash Applications for Mobile Devices
    Flash Mobile Developing Android and iOS Applications
    Flash Game Development by Example
    Actionscript 3.0 迁移指南
    在SWT中非UI线程控制界面
  • 原文地址:https://www.cnblogs.com/cjxns/p/14678311.html
Copyright © 2011-2022 走看看