美文网首页
java 常用设计模式

java 常用设计模式

作者: VincentStory | 来源:发表于2021-02-25 22:56 被阅读0次
1.简单工厂模式

核心:提供一个创建对象的功能,不需要关心具体实现

public abstract class Product{
    public abstract void method();
} 
public  abstract class Factory{
    public abstract Product createProduct();
}

public class ConcreteProductA extends Product{
    public void method(){
        System.out.println("我是产品A!");
    }
}
public class ConcreteProductB extends Product{
    public void method(){
        System.out.println("我是产品B!");
    }
}
// 类的实例化在子类实现
public class MyFactory extends Factory{
    public Product createProduct(){
        return new ConcreteProductA();
    }
}

2.外观模式

核心:隐藏了系统的复杂性,为子系统中的一组接口提供了一个统一的访问接口,实现了高内聚,低耦合

public class CPU {
    
    public void startup(){
        System.out.println("cpu startup!");
    }
    
    public void shutdown(){
        System.out.println("cpu shutdown!");
    }
}
public class Memory {
    
    public void startup(){
        System.out.println("memory startup!");
    }
    
    public void shutdown(){
        System.out.println("memory shutdown!");
    }
}

public class Computer {
    private CPU cpu;
    private Memory memory;
    
    public Computer(){
        cpu = new CPU();
        memory = new Memory();
    }
    
    public void startup(){
        System.out.println("start the computer!");
        cpu.startup();
        memory.startup();
        System.out.println("start computer finished!");
    }
    
    public void shutdown(){
        System.out.println("begin to close the computer!");
        cpu.shutdown();
        memory.shutdown();
        System.out.println("computer closed!");
    }
}

public class User {
 
    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.startup();
        computer.shutdown();
    }
}
3.构建者模式

核心:为了分离对象的属性与创建过程

/**
 * Builder.java
 *  建造者
 */
abstract class Builder {
    //汉堡
    abstract Builder bulidA(String mes);
    //饮料
    abstract Builder bulidB(String mes);
    //薯条
    abstract Builder bulidC(String mes);
    //甜品
    abstract Builder bulidD(String mes);
    //获取套餐
    abstract Product build();
}

/**
 * Product.java
 *  产品(麦当劳套餐)
 */
public class Product {
    private String buildA="汉堡";
    private String buildB="饮料";
    private String buildC="薯条";
    private String buildD="甜品";
    public String getBuildA() {
        return buildA;
    }
    public void setBuildA(String buildA) {
        this.buildA = buildA;
    }
    public String getBuildB() {
        return buildB;
    }
    public void setBuildB(String buildB) {
        this.buildB = buildB;
    }
    public String getBuildC() {
        return buildC;
    }
    public void setBuildC(String buildC) {
        this.buildC = buildC;
    }
    public String getBuildD() {
        return buildD;
    }
    public void setBuildD(String buildD) {
        this.buildD = buildD;
    }
    @Override
        public String toString() {
            return buildA+"\n"+buildB+"\n"+buildC+"\n"+buildD+"\n"+"组成套餐";
        }
}
/**
 * ConcreteBuilder.java
 *  具体建造者(服务员)
 */
public class ConcreteBuilder extends Builder{
    private Product product;
    public ConcreteBuilder() {
        product = new Product();
    }

    @Override
    Product build() {
        return product;
    }

    @Override
    Builder bulidA(String mes) {
        product.setBuildA(mes);
        return this;
    }

    @Override
    Builder bulidB(String mes) {
        product.setBuildB(mes);
        return this;
    }

    @Override
    Builder bulidC(String mes) {
        product.setBuildC(mes);
        return this;
    }

    @Override
    Builder bulidD(String mes) {
        product.setBuildD(mes);
        return this;
    }
}
/**
 * Test.java
 *  测试类
 */
public class Test {
    public static void main(String[] args) {
         ConcreteBuilder concreteBuilder = new ConcreteBuilder();
         Product build = concreteBuilder
                .bulidA("牛肉煲")
//              .bulidC("全家桶")
                .bulidD("冰淇淋")
                .build();
        System.out.println(build.toString());
    }
}
4.责任链模式

核心:责任链模式是将多个处理事件的行为组合成一条链,通过调用链来对事件进行批处理。与单一事件处理不同,责任链模式强调多个事件连续处理,注重事件处理的序列化。

/**
 * @author Hanlin Wang
 */

public class ChainOfResponsibilityMode {
    public static void main(String[] args) {
        //创建
        Handler master = new Handler("h1", new Handler("h2", new Handler(
                "h3", new Handler("h4"))));
        master.handle();
    }
}

//定义处理器接口
interface Hand{
    void setSubHandler(Handler subHandler);
    Handler getSubHandler();
    void handle();
}

//定义处理器
class Handler implements Hand{
    //处理器名字
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public Handler(String name){
        this.name = name;
    }

    public Handler(String name, Handler subHandler){
        this.name = name;
        this.subHandler = subHandler;
    }

    //赋予责任的另一个同类
    private Handler subHandler;

    //注入当前类
    public void setSubHandler(Handler subHandler){
        this.subHandler = subHandler;
    }

    //getter方法
    public Handler getSubHandler(){
        return this.subHandler;
    }

    //处理
    public void handle(){
        System.out.println(this.name + " is handling");
        if (this.getSubHandler()!=null) {
            this.subHandler.handle();           
        }
    }
}
5.单例模式

(1)实现不加锁的线程安全的单例模式


public class Singleton {
    public Singleton()
    {
        System.out.println("初始化");
    }
    private static class Inner
    {
        private static Singleton s=new Singleton();
    }
    public static Singleton getInstance()
    {
        return Inner.s;

// 通过静态内部类的方式实现单例模式是线程安全的,同时静态内部类不会在Singleton类加载时就加载,而是在调用getInstance()方法时才进行加载,达到了懒加载的效果。
//但是这种方式可能会存在反射攻击或者反序列化攻击,会造成不同的实例,违背了单例模式原则

(二) 枚举实现单例
最佳的单例实现模式就是枚举模式。利用枚举的特性,让JVM来帮我们保证线程安全和单一实例的问题。除此之外,写法还特别简单

public enum Singleton {
    INSTANCE;
    public void doSomething() {
        System.out.println("doSomething");
    }
}
//方法调用
public class Main {
    public static void main(String[] args) {
        Singleton.INSTANCE.doSomething();
    }

}
6.适配器模式

相关文章

  • Java 常用设计模式简例

    简述Java常用设计模式 简述Java常用设计模式及设计原则 strate---------策略模式针对接口编程,...

  • 工厂模式

    java设计模式-工厂模式 工厂模式: 工厂模式是java设计模式里最常用的设计模式之一。 工厂模式属于创建型模式...

  • java中常用的设计模式?

    java中常用的设计模式?

  • 知识复盘

    1:熟练使用Android常用性能调优 2:Java常用设计模式 3:Android常用设计模式(架构) 4:An...

  • 单例模式

    JAVA设计模式之单例模式 十种常用的设计模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法...

  • java动态代理(JDK和cglib)(转载自http://ww

    java动态代理(JDK和cglib) JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是...

  • 设计模式之工厂模式

    工厂模式 工厂模式(Factory Pattern)是Java中最常用的设计模式之一,这种设计模式属于创建型模式,...

  • 设计模式-工厂模式

    工厂模式定义: 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式...

  • Java设计模式——工厂模式

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,...

  • 2.工厂模式

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,...

网友评论

      本文标题:java 常用设计模式

      本文链接:https://www.haomeiwen.com/subject/zkogehtx.html