设计模式(java版)更新中

设计原则

单一职责原则

一个类只负责一项职责,因为其他职责改变可能会改变这个类

接口隔离原则

和需要的接口建立依赖关系,一个类对另一个类的依赖建立在最小接口上

依赖倒转原则

依赖抽象(接口或抽象类)而不是细节(具体的实现类),面向接口编程
(1)通过接口传递
(2)通过构造器传递
(3)通过setter方法进行传递

里氏替换原则

子类尽量不要重写父类方法,聚合,组合,依赖,不遵守影响复用性,继承一个更通俗的基类

开闭原则

扩展功能修改代码,原来功能代码未改变,扩展而不是修改,原则的根本目的

迪米特法则

最少知道原则,封装到类里,通过public方法调用,陌生的类不要以局部变量出现,直接朋友,降低耦合

合成复用原则

核心思想

1.找出应用中可能存在的变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起
2.针对接口编程,而不是针对实现编程
3.为了交互对象之间的松耦合进行努力

设计模式

单例模式

静态内部类

枚举

双重检查

工厂方法模式

abstract class AbsCar{
    abstract void createFactory(String name);
}
class BeijingCar extends AbsCar{

    CarCreate carCreate;

    @Override
    void createFactory(String name) {
        System.out.println("北京地区");
        if(name.equals("奔驰")){
            carCreate=new Benz();
            carCreate.Consumer();
        }
        else if (name.equals("宝马")){
            carCreate=new BMW();
            carCreate.Consumer();
        }
        carCreate.price();
        carCreate.color();
    }
}
class ShandongCar extends AbsCar{

    CarCreate carCreate;

    @Override
    void createFactory(String name) {
        System.out.println("山东地区");
        if(name.equals("奔驰")){
            carCreate=new Benz();
            carCreate.Consumer();
        }
        else if (name.equals("宝马")){
            carCreate=new BMW();
            carCreate.Consumer();
        }
        carCreate.price();
        carCreate.color();
    }
}
public class FactoryMethodModel {
    public static void main(String[] args) {
        do{
            Scanner scanner=new Scanner(System.in);
            System.out.println("请输入地区");
            String place=scanner.nextLine();
            System.out.println("请输入品牌");
            String brand=scanner.nextLine();
            if (place.equals("北京")){
                AbsCar absCar = new BeijingCar();
                absCar.createFactory(brand);
            }else if (place.equals("山东")){
                AbsCar absCar = new ShandongCar();
                absCar.createFactory(brand);
            }else {
                break;
            }
        }while(true);
    }
}

抽象工厂模式

原型模式

class Cuboid implements Cloneable{
    private String length;
    private String width;
    private String high;

    public String getLength() {
        return length;
    }

    public String getWidth() {
        return width;
    }

    public String getHigh() {
        return high;
    }

    public void setLength(String length) {
        this.length = length;
    }

    public void setWidth(String width) {
        this.width = width;
    }

    public void setHigh(String high) {
        this.high = high;
    }

    @Override
    public String toString() {
        return "Cuboid{" +
                "length='" + length + '\'' +
                ", width='" + width + '\'' +
                ", high='" + high + '\'' +
                '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
public class CloneModel {
    public static void main(String[] args) {
        Cuboid cuboidOne=new Cuboid();
        try {
            Cuboid cuboidTwo=(Cuboid)cuboidOne.clone();
            System.out.println(cuboidOne==cuboidTwo);
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }

    }
}

建造者模式

abstract class CuboidBuilder{
    protected Cuboid cuboid=new Cuboid();

    public abstract void drawLine();
    public abstract void drawColor();

    public Cuboid drawCuboid(){
        return cuboid;
    }
}
class BigCuboid extends CuboidBuilder{

    @Override
    public void drawLine() {
        System.out.println("长宽高为50厘米的正方体");
 }

    @Override
    public void drawColor() {
        System.out.println("颜色为红色的正方体");
    }
}
class SmallCuboid extends CuboidBuilder{

    @Override
    public void drawLine() {
        System.out.println("长宽高为1厘米的正方体");
    }

    @Override
    public void drawColor() {
        System.out.println("颜色为黄色的正方体");
    }
}
class CuboidDirector{
    CuboidBuilder cuboidBuilder=null;
    public CuboidDirector(CuboidBuilder cuboidBuilder){
        this.cuboidBuilder=cuboidBuilder;
    }
    public Cuboid succedCuboid(){
        cuboidBuilder.drawLine();
        cuboidBuilder.drawColor();
        return cuboidBuilder.drawCuboid();
    }
}
public class BuilderModel {
    public static void main(String[] args) {
        BigCuboid bigCuboid=new BigCuboid();
        CuboidDirector cuboidDirector=new CuboidDirector(bigCuboid);
        Cuboid cuboid=cuboidDirector.succedCuboid();
    }

}

Guess you like

Origin blog.csdn.net/weixin_43848665/article/details/121428243