面向对象——设计模式(创建型)

抽象工厂


java 复制代码
public class AbstractFactory {
    public static void main(String[] args){
        Factory factory1=new Factory1();

        ProductA productA1=factory1.createProductA();
        productA1.info();

        ProductB productB1=factory1.createProductB();
        productB1.info();


        Factory factory2=new Factory2();

        ProductA productA2=factory2.createProductA();
        productA2.info();

        ProductB productB2=factory2.createProductB();
        productB2.info();



    }
}


    interface ProductA{
        public void info();
    }
    interface ProductB{
        public void info();
    }
    class ProductA1 implements ProductA{
        @Override
        public void info() {
            System.out.println("产品的信息:A1");
        }
    }
    class ProductA2 implements ProductA{
        @Override
        public void info() {
            System.out.println("产品的信息:A2");
        }
    }
    class ProductB1 implements ProductB{
        @Override
        public void info() {
            System.out.println("产品的信息:B1");
        }
    }
    class ProductB2 implements ProductB{
        @Override
        public void info() {
            System.out.println("产品的信息:B2");
        }
    }
    interface Factory{
        public ProductA createProductA();
        public ProductB createProductB();
    }
    class Factory1 implements Factory{
        @Override
        public ProductA createProductA() {
            return new ProductA1();
        }

        @Override
        public ProductB createProductB() {
            return new ProductB1();
        }
    }

    class Factory2 implements Factory{
        @Override
        public ProductA createProductA() {
            return new ProductA2();
        }

        @Override
        public ProductB createProductB() {
            return new ProductB2();
        }
    }

生成器(Builder)

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不用的表示。

java 复制代码
import java.util.ArrayList;
import java.util.List;

public class BuilderModel
{
    public static void main(String[] args){
        Director director=new Director();

        Builder builder1=new Builder1();
        director.Construct(builder1);
        Product product1=builder1.getResult();
        product1.show();

        Builder builder2=new Builder2();
        director.Construct(builder2);
        Product product2=builder2.getResult();
        product2.show();;

    }
}

class Director{
    public void Construct(Builder builder){
        builder.BuildPart();
    }
}


abstract class Builder{
    public abstract void BuildPart();
    public abstract Product getResult();
}


class Builder1 extends Builder{
    Product product=new Product();

    @Override
    public void BuildPart() {
        product.Add("A");
        product.Add("B");
        product.Add("C");
        product.Add("D");
    }

    @Override
    public Product getResult() {
        return product;
    }
}


class Builder2 extends Builder{
    Product product=new Product();

    @Override
    public void BuildPart() {
        product.Add("a");
        product.Add("b");
        product.Add("c");
        product.Add("d");
    }

    @Override
    public Product getResult() {
        return product;
    }
}


class Product{
    List<String> parts=new ArrayList<String>();

    public void Add(String part){
        parts.add(part);
    }

    public void show(){
        System.out.println("产品的组成:");
        for(String s:parts)
            System.out.print(s+"");

        System.out.print("\n");
    }

}

原型


java 复制代码
public class PrototypeModel {
    public static void main(String[] args){
        Product product1=new Product(2022,5.21);
        System.out.println(product1.getID()+" "+product1.getPrice());


        product1.Clone();

        Product product2=(Product) product1.Clone();
        System.out.println(product2.getID()+" "+product2.getPrice());
    }


}

interface Prototype{
    public Object Clone();
}

class Product implements Prototype{
    private  int id;
    private double price;

    public Product(){}

    public Product(int id,double price){
        this.id=id;
        this.price=price;
    }

    public int getID(){
        return id;
    }
    public double getPrice(){
        return price;
    }

    @Override
    public Object Clone() {
        Product object=new Product();
        object.id=this.id;
        object.price=this.price;


        return object;
    }
}

单例模式

java 复制代码
public class SingletonModel{
    public static void main(String[] args){
        Singleton singleton1=Singleton.getInstance();
    }

}


class Singleton{

    
    private static Singleton instance=new Singleton();
    private Singleton(){}    //仅有唯一一个实例

    public static Singleton getInstance(){
        return instance;
    }
}
相关推荐
studyForMokey3 分钟前
【Android面试】Java & Kotlin语言
android·java·面试
弹简特10 分钟前
【Java-阔怕的JVM】JVM
java·开发语言·jvm
2301_7806698611 分钟前
UDP通信(一发一收,多发多收)、TCP通信(一发一收,多发多收、同时接收多个客户端的消息)、B/S架构的原理
java·tcp/ip·udp
小冷coding14 分钟前
工作流是什么呢?
java·面试
像少年啦飞驰点、18 分钟前
零基础入门 Redis:从缓存原理到 Spring Boot 集成实战
java·spring boot·redis·缓存·编程入门
虾说羊20 分钟前
Springboot中配置欢迎页的方式
java·spring boot·后端
qq_124987075321 分钟前
基于Spring Boot的长春美食推荐管理系统的设计与实现(源码+论文+部署+安装)
java·前端·spring boot·后端·毕业设计·美食·计算机毕业设计
九皇叔叔38 分钟前
【02】SpringBoot3 MybatisPlus 加入日志功能
java·mysql·mybatis·日志·mybatisplus
java1234_小锋38 分钟前
什么是Java可重入锁?
java·开发语言
不会c+39 分钟前
Spring和Springboot的区别
java·spring boot·spring