美文网首页
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 常用设计模式

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