日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

几个重要的设计模式

發布時間:2024/2/28 asp.net 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 几个重要的设计模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

工廠方法

定義了一個創建對象的接口,但由子類決定要實例化哪個類。工廠方法把實例化操作推遲到子類。

public abstract class Factory {abstract public Product factoryMethod();public void doSomething() {Product product = factoryMethod();// do something with the product} } public class ConcreteFactory extends Factory {public Product factoryMethod() {return new ConcreteProduct();} } public class ConcreteFactory1 extends Factory {public Product factoryMethod() {return new ConcreteProduct1();} } public class ConcreteFactory2 extends Factory {public Product factoryMethod() {return new ConcreteProduct2();} }

策略

定義一系列算法,封裝每個算法,并使它們可以互換。策略模式可以讓算法獨立于使用它的客戶端。

public interface QuackBehavior {void quack(); } public class Quack implements QuackBehavior {@Overridepublic void quack() {System.out.println("quack!");} } public class Squeak implements QuackBehavior{@Overridepublic void quack() {System.out.println("squeak!");} } public class Duck {private QuackBehavior quackBehavior;public void performQuack() {if (quackBehavior != null) {quackBehavior.quack();}}public void setQuackBehavior(QuackBehavior quackBehavior) {this.quackBehavior = quackBehavior;} } public class Client {public static void main(String[] args) {Duck duck = new Duck();duck.setQuackBehavior(new Squeak());duck.performQuack();duck.setQuackBehavior(new Quack());duck.performQuack();} }

適配器模式

把一個類接口轉換成另一個用戶需要的接口。

public interface Duck {void quack(); } public interface Turkey {void gobble(); } public class WildTurkey implements Turkey {@Overridepublic void gobble() {System.out.println("gobble!");} } public class TurkeyAdapter implements Duck {Turkey turkey;public TurkeyAdapter(Turkey turkey) {this.turkey = turkey;}@Overridepublic void quack() {turkey.gobble();} } public class Client {public static void main(String[] args) {Turkey turkey = new WildTurkey();Duck duck = new TurkeyAdapter(turkey);duck.quack();} }

包裝

設計不同種類的飲料,飲料可以添加配料,比如可以添加牛奶,并且支持動態添加新配料。每增加一種配料,該飲料的價格就會增加,要求計算一種飲料的價格。

public interface Beverage {double cost(); } public class DarkRoast implements Beverage {@Overridepublic double cost() {return 1;} } public class HouseBlend implements Beverage {@Overridepublic double cost() {return 1;} } public abstract class CondimentDecorator implements Beverage {protected Beverage beverage; } public class Milk extends CondimentDecorator {public Milk(Beverage beverage) {this.beverage = beverage;}@Overridepublic double cost() {return 1 + beverage.cost();} } public class Mocha extends CondimentDecorator {public Mocha(Beverage beverage) {this.beverage = beverage;}@Overridepublic double cost() {return 1 + beverage.cost();} } public class Client {public static void main(String[] args) {Beverage beverage = new HouseBlend();beverage = new Mocha(beverage);beverage = new Milk(beverage);System.out.println(beverage.cost());} }

責任鏈??

使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈發送該請求,直到有一個對象處理它為止

public abstract class Handler {protected Handler successor;public Handler(Handler successor) {this.successor = successor;}protected abstract void handleRequest(Request request); } public class ConcreteHandler1 extends Handler {public ConcreteHandler1(Handler successor) {super(successor);}@Overrideprotected void handleRequest(Request request) {if (request.getType() == RequestType.TYPE1) {System.out.println(request.getName() + " is handle by ConcreteHandler1");return;}if (successor != null) {successor.handleRequest(request);}} } public class ConcreteHandler2 extends Handler {public ConcreteHandler2(Handler successor) {super(successor);}@Overrideprotected void handleRequest(Request request) {if (request.getType() == RequestType.TYPE2) {System.out.println(request.getName() + " is handle by ConcreteHandler2");return;}if (successor != null) {successor.handleRequest(request);}} } public class Request {private RequestType type;private String name;public Request(RequestType type, String name) {this.type = type;this.name = name;}public RequestType getType() {return type;}public String getName() {return name;} } public enum RequestType {TYPE1, TYPE2 } public class Client {public static void main(String[] args) {Handler handler1 = new ConcreteHandler1(null);Handler handler2 = new ConcreteHandler2(handler1);Request request1 = new Request(RequestType.TYPE1, "request1");handler2.handleRequest(request1);Request request2 = new Request(RequestType.TYPE2, "request2");handler2.handleRequest(request2);} } request1 is handle by ConcreteHandler1 request2 is handle by ConcreteHandler2

觀察者

定義對象之間的一對多依賴,當一個對象狀態改變時,它的所有依賴都會收到通知并且自動更新狀態。主題(Subject)是被觀察的對象,而其所有依賴者(Observer)稱為觀察者。

public interface Subject {void registerObserver(Observer o);void removeObserver(Observer o);void notifyObserver(); } public class WeatherData implements Subject {private List<Observer> observers;private float temperature;private float humidity;private float pressure;public WeatherData() {observers = new ArrayList<>();}public void setMeasurements(float temperature, float humidity, float pressure) {this.temperature = temperature;this.humidity = humidity;this.pressure = pressure;notifyObserver();}@Overridepublic void registerObserver(Observer o) {observers.add(o);}@Overridepublic void removeObserver(Observer o) {int i = observers.indexOf(o);if (i >= 0) {observers.remove(i);}}@Overridepublic void notifyObserver() {for (Observer o : observers) {o.update(temperature, humidity, pressure);}} } public interface Observer {void update(float temp, float humidity, float pressure); } public class StatisticsDisplay implements Observer {public StatisticsDisplay(Subject weatherData) {weatherData.reisterObserver(this);}@Overridepublic void update(float temp, float humidity, float pressure) {System.out.println("StatisticsDisplay.update: " + temp + " " + humidity + " " + pressure);} } public class CurrentConditionsDisplay implements Observer {public CurrentConditionsDisplay(Subject weatherData) {weatherData.registerObserver(this);}@Overridepublic void update(float temp, float humidity, float pressure) {System.out.println("CurrentConditionsDisplay.update: " + temp + " " + humidity + " " + pressure);} } public class WeatherStation {public static void main(String[] args) {WeatherData weatherData = new WeatherData();CurrentConditionsDisplay currentConditionsDisplay = new CurrentConditionsDisplay(weatherData);StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData);weatherData.setMeasurements(0, 0, 0);weatherData.setMeasurements(1, 1, 1);} } CurrentConditionsDisplay.update: 0.0 0.0 0.0 StatisticsDisplay.update: 0.0 0.0 0.0 CurrentConditionsDisplay.update: 1.0 1.0 1.0 StatisticsDisplay.update: 1.0 1.0 1.0

?

?

總結

以上是生活随笔為你收集整理的几个重要的设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。