芯が強い人になるESTJ-A

# 23种模式

IT開発 Tags: 无标签 阅读: 234

饿汉式

package com.xuwen.single;

/**
 * author:xuwen
 * Created on 2021/7/25
 */

//饿汉式->构造器私有,别人无法new对象,保证就一个对象
public class Hungry {
    //可能浪费空间
    private byte[] data1 = new byte[1024*1024];
    private byte[] data2 = new byte[1024*1024];
    private byte[] data3 = new byte[1024*1024];

    private Hungry(){

    }

    private final static Hungry HUNGRY = new Hungry();
    public static Hungry getInstance(){
        return HUNGRY;
    }

}

懒汉式

package com.xuwen.single;

/**
 * author:xuwen
 * Created on 2021/7/25
 */

//懒汉式->构造器私有,别人无法new对象,保证就一个对象
public class LazyMan {


    //构造方法私有化
    private LazyMan(){

    }
    private volatile static LazyMan LazyMan;

    //双重检测锁模式->DCL懒汉式s
    public static LazyMan getInstance(){
        if(LazyMan == null){
            //锁class,确保只有一个s
            synchronized (LazyMan.class){
                if(LazyMan == null){
                    LazyMan = new LazyMan();
                }
            }
        }
        return LazyMan;
    }
}

工厂模式

截屏2021-07-25 19.22.16.jpg

简单工厂模式

package com.xuwen.Factory;

/**
 * author:xuwen
 * Created on 2021/7/25
 */
public class CarFactory {
    public static Car getCar(String car){
        if(car.equals("五菱宏光")){
            return new Wulin();
        }else if(car.equals("特斯拉")){
            return new Telsta();
        }else{
            return null;
        }
    }
}

工厂方法模式
截屏2021-07-25 19.28.42.jpg

截屏2021-07-25 19.33.24.jpg

Car接口一个,CarFactory接口一个。

消费者一个类,特斯拉类+特斯拉工厂类,五菱宏光类+五菱宏光工厂类。

package com.xuwen.Method;

/**
 * author:xuwen
 * Created on 2021/7/25
 */
public interface Car {
    void name();
}
package com.xuwen.Method;

//工厂方法模式!
public interface CarFactory {
    Car getCar();
}
package com.xuwen.Method;

/**
 * author:xuwen
 * Created on 2021/7/25
 */
public class Telsta implements Car {
    @Override
    public void name() {
        System.out.println("特斯拉");
    }
}
package com.xuwen.Method;

public class TelstaFactory implements CarFactory{
    @Override
    public Car getCar() {
        return new Telsta();
    }
}
package com.xuwen.Method;

import com.xuwen.Factory.CarFactory;

/**
 * author:xuwen
 * Created on 2021/7/25
 */
public class Comsumer {
    //main
    public static void main(String[] args) {
        Car car1 = new WulinFactory().getCar();
        Car car2 = new TelstaFactory().getCar();

        car1.name();
        car2.name();
    }

}

抽象工厂模式

截屏2021-07-25 19.46.48.jpg
截屏2021-07-25 19.47.41.jpg
截屏2021-07-25 19.53.18.jpg
截屏2021-07-25 20.19.09.jpg

抽象的产品工厂,接口
抽象的iphone工厂,接口
抽象的路由器工厂,接口
小米工厂interface抽象的产品工厂-》写小米手机类,写小米路由器类,写小米工厂类
华为工厂interface,抽象的产品工厂-》写华为手机类,写华为路由器类,写华为工厂类

package com.xuwen.AbstractFactory;


//手机产品接口
public interface IphoneProduct {
    void start();
    void shutdown();
    void callup();
    void sendSMS();

}
package com.xuwen.AbstractFactory;

//路由器产品接口
public interface IRouterProduct {

    void start();
    void shutdown();
    void openwifi();
    void setting();


}
package com.xuwen.AbstractFactory;

/**
 * author:xuwen
 * Created on 2021/7/25
 */
//抽象产品工厂
    //大家都是接口!!!
    //抽象工厂,生产的是抽象产品
public interface IProductFactory {

    //生产手机
    IphoneProduct iphoneProduct();

    //生产路由器
    IRouterProduct routerProduct();


}

小米类

package com.xuwen.AbstractFactory;

/**
 * author:xuwen
 * Created on 2021/7/25
 */

//小米手机类
public class XiaomiPhone implements IphoneProduct {

    @Override
    public void start() {
        System.out.println("开启小米手机");
    }

    @Override
    public void shutdown() {
        System.out.println("关闭小米手机");

    }

    @Override
    public void callup() {
        System.out.println("使用小米手机打电话");

    }

    @Override
    public void sendSMS() {
        System.out.println("使用小米手机发短信s");

    }
}

小米路由器类

package com.xuwen.AbstractFactory;

/**
 * author:xuwen
 * Created on 2021/7/25
 */

//产品,小米路由器
public class XiaomiRouter implements IRouterProduct {
    @Override
    public void start() {
        System.out.println("打开小米路由器");

    }

    @Override
    public void shutdown() {
        System.out.println("关闭小米路由器");

    }

    @Override
    public void openwifi() {
        System.out.println("打开小米路由器的wifi");

    }

    @Override
    public void setting() {
        System.out.println("设定小米路由器");

    }
}

小米工厂类

package com.xuwen.AbstractFactory;

/**
 * author:xuwen
 * Created on 2021/7/25
 */
public class xiaomiFactory implements IProductFactory {

    @Override
    public IphoneProduct iphoneProduct() {
        return new XiaomiPhone();
    }

    @Override
    public IRouterProduct routerProduct() {
        return  new XiaomiRouter();
    }
}

截屏2021-07-25 20.41.33.jpg

工厂模式结论

截屏2021-07-25 19.36.33.jpg

OOP七大原则

建造者模式

原型模式

适配器模式

桥接模式

静态代理模式