国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

這篇具有很好參考價(jià)值的文章主要介紹了【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

一、設(shè)計(jì)模式的分類

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

背背背

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

1

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

二、創(chuàng)建型設(shè)計(jì)模式(5種)

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

三、簡單工廠模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

簡單工廠模式代碼實(shí)現(xiàn)如下:

/**
 * @author:CaiCai
 * @date : 2023/4/26 9:11
 * 
 */

/*
簡單工廠模式
*  */
public class SimpleFactory {

    public static void main(String[] args){
        Product productA=Factory.createProduct("A");
        productA.info();

        Product productB=Factory.createProduct("B");
        productB.info();
    }

}
class Factory {
    public static Product createProduct(String type){
        Product product =null;
        switch (type){
            case "A":
                product=new ProductA();
                break;
            case "B":
                product=new ProductB();
                break;
            default:
                System.out.println("沒有"+ type +"類型的產(chǎn)品!");
                break;
        }
        return product;
    }
}

abstract  class Product{
    public abstract  void info();
}

class ProductA extends  Product{
    @Override
    public  void info(){
        System.out.println("產(chǎn)品信息:A");
    }
}
class ProductB extends  Product{
    @Override
    public  void info(){
        System.out.println("產(chǎn)品信息:B");
    }
}

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

四、工廠方法模式

??意圖要背
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
工廠方法代碼實(shí)現(xiàn)如下:

/**
 * @author :CaiCai
 * @date : 2023/4/26 11:54
 */
public class FactoryMethods {
    public static void main(String[] args) {

        Factory factoryA=new FactoryA();
        Product productA=factoryA.createProduct();
        productA.info();

        Factory factoryB=new FactoryB();
        Product productB=factoryB.createProduct();
        productB.info();
    }
}


//class Factory
interface Factory{
    public Product createProduct();

}
class FactoryA implements Factory{
    @Override
    public Product createProduct() {
        return new ProductA();
    }
}

class FactoryB implements Factory{
    @Override
    public Product createProduct() {

        return new ProductB();
    }
}


interface Product{
public  void info();
}
class ProductA implements Product{
    @Override
    public void info(){
        System.out.println("產(chǎn)品的信息:A");
    }
}

class ProductB implements Product{
    @Override
    public void info(){
        System.out.println("產(chǎn)品的信息:B");
    }
}

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

五、抽象工廠模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

抽象工廠模式代碼如下:

/**
 * @author :CaiCai
 * @date : 2023/4/26 11:54
 */
public class AbstractFactory {
    public static void main(String[] args) {

        Factory factory1=new Factory1();
        ProductA productA=factory1.createProductA();
        productA.info();

        Factory factory2=new Factory2();
        ProductB productB=factory2.createProductB();
        productB.info();
    }
}


//class Factory
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();
    }
}


interface ProductA{
public  void info();
}
class ProductA1 implements ProductA{
    @Override
    public void info(){
        System.out.println("產(chǎn)品的信息:A1");
    }
}
class ProductA2 implements ProductA{
    @Override
    public void info(){
        System.out.println("產(chǎn)品的信息:A2");
    }
}


interface ProductB{
    public void info();
}
class ProductB1 implements ProductB{
    @Override
    public void info(){
        System.out.println("產(chǎn)品的信息:B1");
    }
}
class ProductB2 implements ProductB{
    @Override
    public void info(){
        System.out.println("產(chǎn)品的信息:B2");
    }
}

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

2

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

3

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

六、生成器模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
生成器模式代碼如下:

import java.util.ArrayList;
import java.util.List;

/**
 * @author     :CaiCai
 * @date       : 2023/4/26 13:49
 * 
 */public class Main {
    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");

    }

    @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("產(chǎn)品的組成:");
         for(String s : parts)
             System.out.print(s+"");

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

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

4

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

5

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

6

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

七、原型模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

原型模式代碼實(shí)現(xiàn)如下:

public class Main {
    public static void main(String[] args) {
        Product product1=new Product(2023,4.26);
        System.out.println(product1.getId()+"  "+product1.getPrice());

        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;
    }
}

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

八、單例模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
單例模式代碼如下:

public class SingletonPattern {
    public static void main(String[] args) {

        Singleton singleton1=Singleton.getInstance();
        Singleton singleton2=Singleton.getInstance();
        Singleton singleton3=Singleton.getInstance();
        System.out.println(singleton1.getNumber()+" "+singleton2.getNumber()+" "+singleton3.getNumber());

        singleton1.setNumber(2024);
        System.out.println(singleton1.getNumber()+" "+singleton2.getNumber()+" "+singleton3.getNumber());

    }

}

class Singleton{
    private  int number=2023;
    public void setNumber(int number){
        this.number=number;
    }
    public int getNumber(){
        return number;
    }
 private static Singleton instance=new Singleton();

    private Singleton(){}

    public static Singleton getInstance(){
        return instance;
    }
}

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

7

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

8

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

9

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

結(jié)構(gòu)型設(shè)計(jì)模式(7種)

結(jié)構(gòu)型速記:橋代理組裝適配器,享元回家裝飾外觀

(喬丹代理了組合(兩臺)適配器),享元(人名)買回家裝飾外觀。

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

九、適配器模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

public class AdaptPattern {
    public static void main(String[] args) {
      Target target=new Adapter();
      target.Request();
    }

}

class Target{
    public void Request(){
        System.out.println("普通請求");
    }
}

class Adapter extends Target{
    private Adapt adapt=new Adapt();
    @Override
    public void Request(){
        adapt.SpecificRequest();
    }
}

class Adapt{
    public void SpecificRequest(){
        System.out.println("特殊請求");
    }
}


【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

10

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

十、橋接模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
橋接模式代碼實(shí)現(xiàn)如下:

public class BridgePattern {
    public static void main(String[] args) {
        Product productA1=new ProductA();
        Product productA2=new ProductA();
        Color red=new Red();

       productA1.setName("產(chǎn)品A1");
        productA1.setColor(red);
        productA1.Operation();

     Blue blue=new Blue();
        productA2.setName("產(chǎn)品A2");
        productA2.setColor(blue);
        productA2.Operation();
    }

}

abstract class Product {
    private String name;
    protected Color color;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setColor(Color color) {
        this.color = color;
    }

    public abstract void Operation();
}


class ProductA extends Product {
    @Override
    public void Operation() {
        color.OperationImp(this.getName());
    }
}
    interface Color {
        public void OperationImp(String name);

    }
    class Red implements Color{
        @Override
        public void OperationImp(String name){
            System.out.println(name+":紅色");
        }
    }
    class Blue implements Color{
        @Override
        public void OperationImp(String name){
            System.out.println(name+":藍(lán)色");
        }
    }


【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

11

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

12

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

13

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

十一、組合模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
組合模式添加和刪除代碼實(shí)現(xiàn):

import java.util.ArrayList;
import java.util.List;

public class CompositePattern {
    public static void main(String[] args) {
        AbstractFile root=new Folder("root");
        AbstractFile folderA=new Folder("folderA");
        AbstractFile fileB=new File("fileB");
        System.out.println(root.Add(folderA));
        System.out.println(root.Add(fileB));

        System.out.println(root.Remove(fileB));
        System.out.println(root.Remove(fileB));

    }

}

abstract class AbstractFile{
    protected  String name;
    public void printName(){
        System.out.println(name);
    }

    public abstract boolean Add(AbstractFile file);
    public  abstract boolean Remove(AbstractFile file);
    //
}

class Folder extends AbstractFile{
    private List<AbstractFile> childrenList=new ArrayList<AbstractFile>();
    public Folder(String name) {
        this.name=name;
    }
    @Override
    public boolean Add(AbstractFile file){
   return childrenList.add(file);
    }

    @Override
    public boolean Remove(AbstractFile file){
     return  childrenList.remove(file);
    }
}


class File extends AbstractFile{
    public File(String name){
        this.name=name;
    }
    @Override
    public boolean Add(AbstractFile file){
        return false;
    }
    @Override
    public boolean Remove(AbstractFile file){
        return false;
    }
}

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

14

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

15

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

16

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

十二、裝飾器模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
裝飾器模式代碼實(shí)現(xiàn):


public class DecoratePattern {
    public static void main(String[] args) {
        Person zhangsan=new Student("張三");
        zhangsan.Operation();

        System.out.println("\n=======我是分割線=======");
   // Decorator decoratorA=new DecoratorA(zhangsan);
     //   decoratorA.Operation();
        zhangsan=new DecoratorA(zhangsan);
        zhangsan.Operation();


    }
}

abstract class Decorator extends Person{
    protected  Person person;
}

class DecoratorA extends Decorator{
    public DecoratorA(Person person){
        this.person=person;
    }

    @Override
    public void Operation(){//職責(zé)
        person.Operation();//原本的職責(zé)
        System.out.print("寫作業(yè)");

    }

}
abstract class Person{
    protected String name;

    public abstract void Operation();//職責(zé)
}

class Student extends Person{
    public Student(String name)
    {
        this.name=name;
    }
    @Override
    public void Operation(){
        System.out.print(name+"的職責(zé):學(xué)習(xí)");
    }


}

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

17

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

十三、外觀模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

外觀模式代碼實(shí)現(xiàn):

import javax.security.auth.Subject;

public class FacadePattern {
    public static void main(String[] args) {
         Facade facade=new Facade();

        facade.methodA();
        facade.methodB();
        facade.methodC();
    }
}
class Facade {
    SubSystemOne subSystemOne;
    SubSystemTwo subSystemTwo;
    SubSystemThree subSystemThree;


    public Facade() {
        subSystemOne = new SubSystemOne();
        subSystemTwo = new SubSystemTwo();
        subSystemThree = new SubSystemThree();

    }
    public void methodA(){
        subSystemOne.methodOne();

    }
    public void methodB(){
        subSystemTwo.methodTwo();

    }
    public void methodC(){
        subSystemThree.methodThree();

    }
}

class SubSystemOne{
    public void methodOne(){
        System.out.println("執(zhí)行子系統(tǒng)一的功能");
    }
}

class SubSystemTwo{
    public void methodTwo(){
        System.out.println("執(zhí)行子系統(tǒng)二的功能");
    }
}

class SubSystemThree{
    public void methodThree(){
        System.out.println("執(zhí)行子系統(tǒng)三的功能");
    }
}

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

18

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

19

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

十四、享元模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

20

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

十五、代理模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
代理模式代碼實(shí)現(xiàn):

public class ProxyPattern {
    public static void main(String[] args) {
        RealSubject realSubject=new RealSubject();
        Proxy proxy=new Proxy(realSubject);

        proxy.buy();
    }
}
interface  Subject{
    public void buy();
}

class  Proxy implements Subject{
    protected RealSubject realSubject;
 public Proxy(RealSubject realSubject){
     this.realSubject=realSubject;
 }

    @Override
    public void buy(){
        System.out.println("辦理購買的手續(xù)");
        realSubject.buy();//付錢
        System.out.println("辦理購買后的手續(xù)");

    }
}

class RealSubject implements Subject{
    @Override
    public void buy(){
        System.out.println("付錢");
    }
}

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

21

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

行為型設(shè)計(jì)模式(11種)

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

十六、責(zé)任鏈模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

代碼實(shí)現(xiàn):
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

十七、命令模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

22

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

23

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

十八、解釋器模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

十九、迭代器模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

二十、中介者模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)


public class MediatorPattern {
    public static void main(String[] args) {
        ConcreteMediator mediator=new ConcreteMediator();

        Colleague1 colleague1=new Colleague1(mediator);
        Colleague2 colleague2=new Colleague2(mediator);

        mediator.setColleague1(colleague1);
        mediator.setColleague2(colleague2);

        colleague1.sendMessage("祝大家軟考一次性通過??!");
        colleague2.sendMessage("2023年5月27軟考");

    }

}

abstract class Colleague{
    protected Mediator mediator;
}

class Colleague1 extends Colleague{
    public Colleague1(Mediator mediator){
        this.mediator=mediator;

    }

    public  void sendMessage(String message){
        mediator.sendMessage(message,this);
    }
    public void Notify(String message){
        System.out.println("同事1收到消息:"+ message);
    }
}

class Colleague2 extends Colleague{
    public Colleague2(Mediator mediator){
        this.mediator=mediator;
    }
    public  void sendMessage(String message){
        mediator.sendMessage(message,this);
    }
    public void Notify(String message){
        System.out.println("同事2收到消息:"+message);
    }
}

abstract class Mediator {
    public abstract void sendMessage(String message, Colleague colleague);
}


class ConcreteMediator extends Mediator{
    private Colleague1 colleague1;
    private Colleague2 colleague2;

    public void setColleague1(Colleague1 colleague1){
        this.colleague1=colleague1;
    }

    public void setColleague2(Colleague2 colleague2){
        this.colleague2=colleague2;
    }
    public void sendMessage(String message,Colleague colleague){
if(colleague==colleague1){
    //讓同事2收到消息
    colleague2.Notify(message);
}else {
    //讓同事1收到消息
    colleague1.Notify(message);

}

    }
}

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

24

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

二十一、備忘錄模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

import java.util.ArrayList;
import java.util.List;

public class MementoPattern {
    public static void main(String[] args) {
        Caretaker caretaker=new Caretaker();
        Originator originator=new Originator();

        originator.setState("427");
        Memento backup1=originator.createMemento();
        caretaker.addMemento(backup1);

        originator.setState("428");
        Memento backup2=originator.createMemento();
        caretaker.addMemento(backup2);

        originator.setState("429");
        Memento backup3=originator.createMemento();
        caretaker.addMemento(backup3);

        System.out.println(originator.getState());

        caretaker.showMemento();

      Memento memento1=caretaker.getMemento(2);
      originator.setMemento(memento1);


      System.out.println("根據(jù)第2次備份還原之后的狀態(tài)為:"+originator.getState());

    }


}

class Originator{//原發(fā)器
    private String state;

    public void setState(String state){
        this.state=state;

    }

    public String getState(){
        return  state;
    }

    public Memento createMemento(){
        return new Memento(state);

    }
    public void setMemento(Memento memento){
        state=memento.getState();
    }

}

class Memento{//備忘錄
    private String state;
    public Memento(String state){
        this.state=state;
    }

    public String getState(){
        return state;
    }
}
class Caretaker{//管理者
    private List<Memento> mementoList=new ArrayList<>();

    public void addMemento(Memento memento){
        mementoList.add(memento);
    }

    public Memento getMemento(int index){
        //判斷參數(shù)是否合法
        if(index>=1 &&index<=mementoList.size()){
            return mementoList.get(index-1);
        }
        return null;
    }

    public void showMemento(){
        int cnt=1;
        for(Memento memento:mementoList){
            System.out.println("第" + cnt +" 次備份,狀態(tài)為:"+memento.getState());
        cnt++;
        }
    }
}

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

二十一、觀察者模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

25

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

26

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

27

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

28

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

29

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

30

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

31

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

二十二、狀態(tài)模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

代碼實(shí)現(xiàn):

public class StatePattern {
    public static void main(String[] args) {
        Context context=new Context();
        System.out.println(context.getState());
        context.Request();//2
        context.Request();//1
        context.Request();//0


        System.out.println(context.getState());
        context.Request();//無貨
    }

}


class Context{//販賣機(jī)
    private int count;

    private State state;

    public Context(){
        count=3;
        state=new StateA();
    }
    public int getCount(){
        return count;
    }

    public void setCount(int count){
        this.count=count;
    }
    public State getState(){
        return state;
    }
    public void getState(State state){
        this.state=state;
    }
    public void Request(){//購買一瓶飲料
        state.Handle(this);

    }


    public void setState(StateA stateA) {
    }

    public void SetState(StateB stateB) {
    }
}

interface State{
    public void Handle(Context context);
}


class StateA implements State{//有貨
    @Override
    public void Handle(Context context){
int count=context.getCount();
if(count>=1){
    System.out.println("購買成功");
    context.setCount(count-1);

    if(context.getCount()==0){
        context.SetState(new StateB());
    }
}else{
    System.out.println("購買失??!");
}
    }

}

class StateB implements State{//無貨
    @Override
    public void Handle(Context context){
int count=context.getCount();
        if(count==0){
            System.out.println("購買成功,等待補(bǔ)貨");
            context.setCount(5);
            System.out.println("補(bǔ)貨成功。請重新購買");
            context.setState(new StateA());
        }
    }

}

32

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

33

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

44-47 B A D C

二十三、策略模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

34

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

35

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

36

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

二十四、模板方法模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

二十五、訪問者模式

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

代碼實(shí)現(xiàn):

import java.util.ArrayList;
import java.util.List;

public  class VisitorPattern {
    public static void main(String[] args) {
        PersonStructure structure=new PersonStructure();
       Visitor1 visitor1=new Visitor1();

        System.out.println("訪問者1訪問記錄");
        structure.Accept(visitor1);
        System.out.println("===============");


        Visitor2 visitor2=new Visitor2();
        System.out.println("訪問者2訪問記錄");

        structure.Accept(visitor2);
    }

}

interface Visitor{
    public void visitStudent(Student student);
    public void visitTeacher(Teacher teacher);
}

class Visitor1 implements Visitor{
    @Override
    public void visitStudent(Student student){
        System.out.println("訪問者1訪問學(xué)生"+student.name);
    }
    @Override
    public void visitTeacher(Teacher teacher){
        System.out.println("訪問者1訪問老師"+teacher.name);


    }
}
class Visitor2 implements Visitor{

    @Override
    public void visitStudent(Student student){
        System.out.println("訪問者2訪問學(xué)生"+student.name);
    }
    @Override
    public void visitTeacher(Teacher teacher){
        System.out.println("訪問者2訪問老師"+teacher.name);


    }
}
class PersonStructure{
    private List<Person> personList=new ArrayList<Person>();
public PersonStructure(){
    personList.add(new Student("張三"));
    personList.add(new Student("李四"));
    personList.add(new Student("王五"));

    personList.add(new Student("李老師"));
    personList.add(new Student("陳老師"));
    personList.add(new Student("劉老師"));
}

public void Accept(Visitor visitor){
    for(Person  person:personList){
        person.Accept(visitor);
    }
}
}
abstract class Person{
    public String name;

    public abstract void Accept(Visitor visitor);

}

class Student extends Person{
    public Student(String name){
        this.name=name;
    }
@Override
    public void Accept(Visitor visitor){
    visitor.visitStudent(this);
}
}

class Teacher extends Person{
    public Teacher(String name){
        this.name=name;
    }
    @Override
    public void Accept(Visitor visitor){
        visitor.visitTeacher(this);
    }
}

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

37

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

Accept只在訪問者模式出現(xiàn)

38

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

二十六、設(shè)計(jì)模式總和

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

39

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

40

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

41

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

結(jié)構(gòu)型:適配橋想組裝外帶

42

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

43

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)
【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

44

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

45

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)

46

【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)文章來源地址http://www.zghlxwxcb.cn/news/detail-471149.html

本章完結(jié)撒花????????

到了這里,關(guān)于【中級軟件設(shè)計(jì)師】—(針對上午題)二十三種設(shè)計(jì)模式(三十九)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 中級軟件設(shè)計(jì)師備考---軟件工程1

    中級軟件設(shè)計(jì)師備考---軟件工程1

    瀑布模型 :最早的一類、適用于需求明確的項(xiàng)目、 結(jié)構(gòu)化 的典型代表 原型模型:先構(gòu)造一個(gè)建議的系統(tǒng)原型再去和用戶深入多次交流,不斷地根據(jù)用戶需求進(jìn)行調(diào)整 演化模型:一步步變化,最后得到產(chǎn)品 增量模型:先完成項(xiàng)目的核心功能,然后一步步增加功能 螺旋模型

    2024年02月02日
    瀏覽(65)
  • 中級軟考-軟件設(shè)計(jì)師(一)

    中級軟考-軟件設(shè)計(jì)師(一)

    1.編譯和解釋 編譯器 不參與運(yùn)行控制 , 解釋器 參與運(yùn)行控制,程序執(zhí)行的速度慢 。 編譯方式 能生成目標(biāo)程序, 解釋方式 不生成。 2.在CPU中,( 運(yùn)算器,ALU )在控制器下完成算術(shù)和邏輯運(yùn)算。( 累加寄存器,AC )為ALU提供一個(gè)工作區(qū),用來暫存數(shù)據(jù)。( 程序計(jì)數(shù)器,

    2024年02月04日
    瀏覽(36)
  • 軟考:中級軟件設(shè)計(jì)師:大數(shù)據(jù)

    軟考:中級軟件設(shè)計(jì)師:大數(shù)據(jù)

    提示:系列被面試官問的問題,我自己當(dāng)時(shí)不會,所以下來自己復(fù)盤一下,認(rèn)真學(xué)習(xí)和總結(jié),以應(yīng)對未來更多的可能性 關(guān)于互聯(lián)網(wǎng)大廠的筆試面試,都是需要細(xì)心準(zhǔn)備的 (1)自己的科研經(jīng)歷, 科研內(nèi)容 ,學(xué)習(xí)的相關(guān)領(lǐng)域知識,要熟悉熟透了 (2)自己的實(shí)習(xí)經(jīng)歷,做了 什

    2024年02月11日
    瀏覽(94)
  • 中級軟考-軟件設(shè)計(jì)師(三)

    中級軟考-軟件設(shè)計(jì)師(三)

    1.netstat -n :可以獲取本計(jì)算機(jī)通過那些端口和外網(wǎng)的IP和端口進(jìn)行連接; 不能診斷DNS故障 。 state狀態(tài): ESTABLISHED:已經(jīng)建立連接 TIME_WAIT:等待連接 2.SNMP是應(yīng)用層。 在SNMP協(xié)議中,團(tuán)體名相當(dāng)于一個(gè)組,在進(jìn)行管理時(shí),是以團(tuán)體名為單位進(jìn)行管理的,基作用域也在相同團(tuán)體名

    2024年02月07日
    瀏覽(99)
  • 軟考:中級軟件設(shè)計(jì)師:HTML

    軟考:中級軟件設(shè)計(jì)師:HTML

    提示:系列被面試官問的問題,我自己當(dāng)時(shí)不會,所以下來自己復(fù)盤一下,認(rèn)真學(xué)習(xí)和總結(jié),以應(yīng)對未來更多的可能性 關(guān)于互聯(lián)網(wǎng)大廠的筆試面試,都是需要細(xì)心準(zhǔn)備的 (1)自己的科研經(jīng)歷, 科研內(nèi)容 ,學(xué)習(xí)的相關(guān)領(lǐng)域知識,要熟悉熟透了 (2)自己的實(shí)習(xí)經(jīng)歷,做了 什

    2024年02月11日
    瀏覽(34)
  • [軟考中級]軟件設(shè)計(jì)師-uml

    [軟考中級]軟件設(shè)計(jì)師-uml

    uml中有4中事物,結(jié)構(gòu)事物,行為事物,分組事物和注釋事物 結(jié)構(gòu)事物是uml模型中的名詞,通常是模型的靜態(tài)部分,描述概念或物理元素 行為事物是uml的動態(tài)部分,是模型中的動詞,描述了跨越時(shí)間和空間的行為 分組事物是uml模型中的組織部分,是一些由模型分解成的盒子,

    2024年02月07日
    瀏覽(100)
  • 軟考中級軟件設(shè)計(jì)師主觀題詳解

    試題 考察內(nèi)容 數(shù)據(jù)流圖/DFD 補(bǔ)充外部實(shí)體、數(shù)據(jù)存儲、加工、數(shù)據(jù)流等 數(shù)據(jù)庫設(shè)計(jì)/ER E-R圖 關(guān)系模式 主鍵/外鍵 規(guī)范化理論 增加實(shí)體 UML建模 類圖 用例圖 活動圖等 C語言算法 C語法+數(shù)據(jù)結(jié)構(gòu) Java/C++ 基礎(chǔ)語法+設(shè)計(jì)模式 名詞 解釋 外部實(shí)體 系統(tǒng)外部現(xiàn)實(shí)世界存在的物體 矩形表

    2024年02月03日
    瀏覽(28)
  • 中級軟件設(shè)計(jì)師備考---程序設(shè)計(jì)語言和法律法規(guī)知識

    中級軟件設(shè)計(jì)師備考---程序設(shè)計(jì)語言和法律法規(guī)知識

    Fortran語言: 科學(xué)計(jì)算 、執(zhí)行效率高 Pascal語言: 為教學(xué)而開發(fā)的 、表達(dá)能力強(qiáng),演化出了 Delphi C語言:指針操作能力強(qiáng)、 高效 Lisp語言:函數(shù)式程序語言、符號處理、 人工智能 C++語言:面向?qū)ο蟆?高效 Java語言:面向?qū)ο?、中間代碼、 跨平臺 C#語言:面向?qū)ο?、中間代碼

    2024年02月03日
    瀏覽(22)
  • 軟考:中級軟件設(shè)計(jì)師:數(shù)據(jù)庫模式、ER模型

    軟考:中級軟件設(shè)計(jì)師:數(shù)據(jù)庫模式、ER模型

    提示:系列被面試官問的問題,我自己當(dāng)時(shí)不會,所以下來自己復(fù)盤一下,認(rèn)真學(xué)習(xí)和總結(jié),以應(yīng)對未來更多的可能性 關(guān)于互聯(lián)網(wǎng)大廠的筆試面試,都是需要細(xì)心準(zhǔn)備的 (1)自己的科研經(jīng)歷, 科研內(nèi)容 ,學(xué)習(xí)的相關(guān)領(lǐng)域知識,要熟悉熟透了 (2)自己的實(shí)習(xí)經(jīng)歷,做了 什

    2024年02月12日
    瀏覽(25)
  • 軟件設(shè)計(jì)師_軟考中級_下午題筆記(已過)

    軟件設(shè)計(jì)師_軟考中級_下午題筆記(已過)

    數(shù)據(jù)流圖分為頂層數(shù)據(jù)流圖和0層數(shù)據(jù)流圖 頂層數(shù)據(jù)流圖只有一個(gè)處理節(jié)點(diǎn)即某某系統(tǒng),頂層數(shù)據(jù)流圖是系統(tǒng)和實(shí)體的數(shù)據(jù)傳輸表示 0層數(shù)據(jù)流圖是將系統(tǒng)細(xì)化 一、數(shù)據(jù)流圖的組成 外部實(shí)體(起點(diǎn),終點(diǎn)) 數(shù)據(jù)流 處理 數(shù)據(jù)存儲 二、數(shù)據(jù)流圖相關(guān)原則 1、頂層圖和0層圖平衡原則

    2024年02月05日
    瀏覽(93)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包