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

抽象工厂


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;
    }
}
相关推荐
q***07142 小时前
Spring Boot 多数据源解决方案:dynamic-datasource-spring-boot-starter 的奥秘(上)
java·spring boot·后端
q***49862 小时前
Spring Boot 3.4 正式发布,结构化日志!
java·spring boot·后端
沐浴露z4 小时前
【微服务】基本概念介绍
java·微服务
Z3r4y5 小时前
【代码审计】RuoYi-4.7.3&4.7.8 定时任务RCE 漏洞分析
java·web安全·ruoyi·代码审计
Kuo-Teng6 小时前
LeetCode 160: Intersection of Two Linked Lists
java·算法·leetcode·职场和发展
Jooou6 小时前
Spring事务实现原理深度解析:从源码到架构全面剖析
java·spring·架构·事务
盖世英雄酱581367 小时前
commit 成功为什么数据只更新了部分?
java·数据库·后端
RainbowC07 小时前
从Dalvik字节码角度优化安卓编码
android·java/jvm
码上淘金7 小时前
在 YAML 中如何将 JSON 对象作为字符串整体赋值?——兼谈 Go Template 中的 fromJson 使用
java·golang·json