[新增功能](master): 更新了一些设计模式的代码及一些博客内容的收集整理

master
土豆兄弟 2 years ago
parent 019731de62
commit 3f631e0949

@ -113,6 +113,51 @@
--- ---
### 单例模式 ### 单例模式
#### 1 定义与类型
定义:保证一个类仅有一个实例,并提供一个全局访问点
类型:创建型
#### 2 适用场景
想确保任何情况下都绝对只有一个实例
#### 3 优点
在内存里只有一个实例,减少了内存开销
可以避免对资源的多重占用
设置了全局访问点,严格控制访问
#### 4 缺点
没有接口,扩展困难
#### 5 重点
私有构造器
线程安全
延迟加载
序列化和反序列化安全
反射
#### 6 单例模式相关的设计模式
单例模式和工厂模式
- 可以把工厂类设计为单例的
单例模式和享元模式
- 享元模式是单例对象的一个工厂
#### 7 Coding
--- ---
@ -126,8 +171,38 @@
--- ---
### 外观模式 ### 外观模式
#### 1 定义与类型
定义: 又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口
外观模式定义了一个高层接口,让子系统更容易使用
类型: 结构型
#### 2 使用场景
子系统越来越复杂,增加外观模式提供简单调用接口
构建多层系统结构,利用外观对象作为每层入口,简化层间调用
#### 3 优点
简化了调用过程,无需了解深入子系统,防止带来风险
减少系统依赖,松散耦合
更好的划分访问层次
符合迪米特法则,即最少知道原则
#### 4 缺点
增加子系统,扩展子系统行为行为很容易引入风险
不符合开闭原则
#### 5 相关的设计模式
外观模式和中介者模式
- 外观模式关注是外部和子系统的交互
- 中介者模式关注是子系统内部的交互
外观模式和单例模式
- 外观模式中的独外观对象做成单例对象使用
外观模式和抽象工厂模式
- 外观类可以通过抽象工厂获取子系统的实例
#### 6 coding
com.baiye.design.pattern.structural.facade
---
### 装饰者模式 ### 装饰者模式

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

@ -1,5 +0,0 @@
package com.baiye.design.behavioral.interpreter;
public interface Interpreter {
int interpret();
}

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.chainofresponsibility; package com.baiye.design.pattern.behavioral.chainofresponsibility;
public abstract class Approver { public abstract class Approver {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.chainofresponsibility; package com.baiye.design.pattern.behavioral.chainofresponsibility;
public class ArticleApprover extends Approver{ public class ArticleApprover extends Approver{

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.chainofresponsibility; package com.baiye.design.pattern.behavioral.chainofresponsibility;
public class Course { public class Course {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.chainofresponsibility; package com.baiye.design.pattern.behavioral.chainofresponsibility;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.chainofresponsibility; package com.baiye.design.pattern.behavioral.chainofresponsibility;
public class VideoApprover extends Approver{ public class VideoApprover extends Approver{
@Override @Override

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.interpreter; package com.baiye.design.pattern.behavioral.interpreter;
public class AddInterpreter implements Interpreter { public class AddInterpreter implements Interpreter {

@ -0,0 +1,5 @@
package com.baiye.design.pattern.behavioral.interpreter;
public interface Interpreter {
int interpret();
}

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.interpreter; package com.baiye.design.pattern.behavioral.interpreter;
public class MultiInterpreter implements Interpreter{ public class MultiInterpreter implements Interpreter{

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.interpreter; package com.baiye.design.pattern.behavioral.interpreter;
import java.util.Stack; import java.util.Stack;

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.interpreter; package com.baiye.design.pattern.behavioral.interpreter;
public class NumberInterpreter implements Interpreter{ public class NumberInterpreter implements Interpreter{

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.interpreter; package com.baiye.design.pattern.behavioral.interpreter;
public class OpratorUtil { public class OpratorUtil {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.interpreter; package com.baiye.design.pattern.behavioral.interpreter;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.iterator; package com.baiye.design.pattern.behavioral.iterator;
public class Course { public class Course {
private String name; private String name;

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.iterator; package com.baiye.design.pattern.behavioral.iterator;
public interface CourseAggregate { public interface CourseAggregate {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.iterator; package com.baiye.design.pattern.behavioral.iterator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.iterator; package com.baiye.design.pattern.behavioral.iterator;
public interface CourseIterator { public interface CourseIterator {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.iterator; package com.baiye.design.pattern.behavioral.iterator;
import java.util.List; import java.util.List;

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.iterator; package com.baiye.design.pattern.behavioral.iterator;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.mediator; package com.baiye.design.pattern.behavioral.mediator;
import java.util.Date; import java.util.Date;

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.mediator; package com.baiye.design.pattern.behavioral.mediator;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.mediator; package com.baiye.design.pattern.behavioral.mediator;
public class User { public class User {
private String name; private String name;

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.memento; package com.baiye.design.pattern.behavioral.memento;
public class Article { public class Article {
private String title; private String title;

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.memento; package com.baiye.design.pattern.behavioral.memento;
import java.util.Stack; import java.util.Stack;

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.memento; package com.baiye.design.pattern.behavioral.memento;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.observer; package com.baiye.design.pattern.behavioral.observer;
import java.util.Observable; import java.util.Observable;

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.observer; package com.baiye.design.pattern.behavioral.observer;
public class Question { public class Question {
private String userName; private String userName;

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.observer; package com.baiye.design.pattern.behavioral.observer;
import java.util.Observable; import java.util.Observable;
import java.util.Observer; import java.util.Observer;

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.observer; package com.baiye.design.pattern.behavioral.observer;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.state; package com.baiye.design.pattern.behavioral.state;
public class CourseVideoContext { public class CourseVideoContext {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.state; package com.baiye.design.pattern.behavioral.state;
public abstract class CourseVideoState { public abstract class CourseVideoState {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.state; package com.baiye.design.pattern.behavioral.state;
public class PlayState extends CourseVideoState{ public class PlayState extends CourseVideoState{
@Override @Override

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.state; package com.baiye.design.pattern.behavioral.state;
public class SpeedState extends CourseVideoState{ public class SpeedState extends CourseVideoState{
@Override @Override

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.state; package com.baiye.design.pattern.behavioral.state;
public class StopState extends CourseVideoState{ public class StopState extends CourseVideoState{
@Override @Override

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.state; package com.baiye.design.pattern.behavioral.state;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.strategy; package com.baiye.design.pattern.behavioral.strategy;
public class EmptyPromotionStrategy implements PromotionStrategy{ public class EmptyPromotionStrategy implements PromotionStrategy{
@Override @Override

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.strategy; package com.baiye.design.pattern.behavioral.strategy;
public class FanxianPromotionStrategy implements PromotionStrategy { public class FanxianPromotionStrategy implements PromotionStrategy {
@Override @Override

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.strategy; package com.baiye.design.pattern.behavioral.strategy;
public class LIjianPromotionStrategy implements PromotionStrategy{ public class LIjianPromotionStrategy implements PromotionStrategy{
@Override @Override

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.strategy; package com.baiye.design.pattern.behavioral.strategy;
public class ManjianPromotionStrategy implements PromotionStrategy{ public class ManjianPromotionStrategy implements PromotionStrategy{
@Override @Override

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.strategy; package com.baiye.design.pattern.behavioral.strategy;
public class PromotionActivity { public class PromotionActivity {
private PromotionStrategy promotionStrategy; private PromotionStrategy promotionStrategy;

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.strategy; package com.baiye.design.pattern.behavioral.strategy;
public interface PromotionStrategy { public interface PromotionStrategy {
void doPromotion(); void doPromotion();

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.strategy; package com.baiye.design.pattern.behavioral.strategy;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.strategy; package com.baiye.design.pattern.behavioral.strategy;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.templatemethod; package com.baiye.design.pattern.behavioral.templatemethod;
public abstract class ACourse { public abstract class ACourse {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.templatemethod; package com.baiye.design.pattern.behavioral.templatemethod;
public class DesignPatternCourse extends ACourse{ public class DesignPatternCourse extends ACourse{
@Override @Override

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.templatemethod; package com.baiye.design.pattern.behavioral.templatemethod;
public class FECourse extends ACourse{ public class FECourse extends ACourse{

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.templatemethod; package com.baiye.design.pattern.behavioral.templatemethod;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.visitor; package com.baiye.design.pattern.behavioral.visitor;
public class CodingCourse extends Course{ public class CodingCourse extends Course{

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.visitor; package com.baiye.design.pattern.behavioral.visitor;
public abstract class Course { public abstract class Course {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.visitor; package com.baiye.design.pattern.behavioral.visitor;
public class FreeCourse extends Course{ public class FreeCourse extends Course{
@Override @Override

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.visitor; package com.baiye.design.pattern.behavioral.visitor;
public interface IVisitor { public interface IVisitor {

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.visitor; package com.baiye.design.pattern.behavioral.visitor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

@ -1,4 +1,4 @@
package com.baiye.design.behavioral.visitor; package com.baiye.design.pattern.behavioral.visitor;
public class Visitor implements IVisitor{ public class Visitor implements IVisitor{

@ -0,0 +1,34 @@
package com.baiye.design.pattern.creational.singleton.lazy;
public class LazyDoubleCheckSingleton {
// 使用 volatile 来防止指令重排序
private volatile static LazyDoubleCheckSingleton lazyDoubleCheckSingleton = null;
/**
*
*/
private LazyDoubleCheckSingleton() {
}
/**
* 线 ->
*/
public static LazyDoubleCheckSingleton getInstance() {
if (null == lazyDoubleCheckSingleton) {
// 锁定的是单例的类
synchronized (LazyDoubleCheckSingleton.class) {
if (null == lazyDoubleCheckSingleton) {
// 1. 分配内存给这个对象
// 2. 初始化对象
// 3. 设置 lazyDoubleCheckSingleton 指向刚分配的内存地址
// fixme 在 2 3 时候可能被重排序 intra-thread semantics 的说明知道 2-3 互换位置不会改变程序的执行结果,允许重排序可以加快程序的执行性能
lazyDoubleCheckSingleton = new LazyDoubleCheckSingleton();
}
}
}
return lazyDoubleCheckSingleton;
}
}

@ -0,0 +1,27 @@
package com.baiye.design.pattern.creational.singleton.lazy;
/**
*
*/
public class LazySingleton {
private static LazySingleton lazySingleton = null;
/**
*
*/
private LazySingleton() {
}
/**
* 线 ->
*/
public static LazySingleton getInstance() {
synchronized (LazySingleton.class){
if (null == lazySingleton) {
lazySingleton = new LazySingleton();
}
}
return lazySingleton;
}
}

@ -0,0 +1,9 @@
package com.baiye.design.pattern.creational.singleton.lazy;
public class T implements Runnable{
@Override
public void run() {
LazySingleton lazySingleton = LazySingleton.getInstance();
System.out.println(Thread.currentThread().getName() + " " + lazySingleton);
}
}

@ -0,0 +1,12 @@
package com.baiye.design.pattern.creational.singleton.lazy;
public class Test {
public static void main(String[] args) {
Thread t1 = new Thread(new T());
Thread t2 = new Thread(new T());
t1.start();
t2.start();
System.out.println("program end");
}
}

@ -1,4 +1,4 @@
package com.baiye.design.structural.adapter.objectadapter; package com.baiye.design.pattern.structural.adapter.clazzadapter;
public class Adaptee { public class Adaptee {
public void adapteeRequest(){ public void adapteeRequest(){

@ -1,4 +1,4 @@
package com.baiye.design.structural.adapter.clazzadapter; package com.baiye.design.pattern.structural.adapter.clazzadapter;
/** /**
* AdapteeTarget * AdapteeTarget

@ -1,4 +1,4 @@
package com.baiye.design.structural.adapter.clazzadapter; package com.baiye.design.pattern.structural.adapter.clazzadapter;
public class ConcreteTarget implements Target{ public class ConcreteTarget implements Target{
@Override @Override

@ -0,0 +1,5 @@
package com.baiye.design.pattern.structural.adapter.clazzadapter;
public interface Target {
void request();
}

@ -1,4 +1,4 @@
package com.baiye.design.structural.adapter.clazzadapter; package com.baiye.design.pattern.structural.adapter.clazzadapter;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {

@ -1,4 +1,4 @@
package com.baiye.design.structural.adapter.clazzadapter; package com.baiye.design.pattern.structural.adapter.objectadapter;
public class Adaptee { public class Adaptee {
public void adapteeRequest(){ public void adapteeRequest(){

@ -1,4 +1,4 @@
package com.baiye.design.structural.adapter.objectadapter; package com.baiye.design.pattern.structural.adapter.objectadapter;
public class Adapter implements Target{ public class Adapter implements Target{

@ -1,4 +1,4 @@
package com.baiye.design.structural.adapter.objectadapter; package com.baiye.design.pattern.structural.adapter.objectadapter;
public class ConcreteTarget implements Target{ public class ConcreteTarget implements Target{

@ -0,0 +1,5 @@
package com.baiye.design.pattern.structural.adapter.objectadapter;
public interface Target {
void request();
}

@ -1,4 +1,4 @@
package com.baiye.design.structural.adapter.objectadapter; package com.baiye.design.pattern.structural.adapter.objectadapter;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {

@ -1,4 +1,4 @@
package com.baiye.design.structural.bridge; package com.baiye.design.pattern.structural.bridge;
public class ABCBank extends Bank{ public class ABCBank extends Bank{

@ -1,4 +1,4 @@
package com.baiye.design.structural.bridge; package com.baiye.design.pattern.structural.bridge;
public interface Account { public interface Account {

@ -1,4 +1,4 @@
package com.baiye.design.structural.bridge; package com.baiye.design.pattern.structural.bridge;
public abstract class Bank { public abstract class Bank {

@ -1,4 +1,4 @@
package com.baiye.design.structural.bridge; package com.baiye.design.pattern.structural.bridge;
public class DepositAccount implements Account{ public class DepositAccount implements Account{
@Override @Override

@ -1,4 +1,4 @@
package com.baiye.design.structural.bridge; package com.baiye.design.pattern.structural.bridge;
public class ICBCBank extends Bank{ public class ICBCBank extends Bank{

@ -1,4 +1,4 @@
package com.baiye.design.structural.bridge; package com.baiye.design.pattern.structural.bridge;
public class SavingAccount implements Account{ public class SavingAccount implements Account{
@Override @Override

@ -1,4 +1,4 @@
package com.baiye.design.structural.bridge; package com.baiye.design.pattern.structural.bridge;
public class Test { public class Test {

@ -1,4 +1,4 @@
package com.baiye.design.structural.composite; package com.baiye.design.pattern.structural.composite;
public abstract class CatalogComponent { public abstract class CatalogComponent {

@ -1,4 +1,4 @@
package com.baiye.design.structural.composite; package com.baiye.design.pattern.structural.composite;
public class Course extends CatalogComponent{ public class Course extends CatalogComponent{

@ -1,4 +1,4 @@
package com.baiye.design.structural.composite; package com.baiye.design.pattern.structural.composite;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

@ -1,4 +1,4 @@
package com.baiye.design.structural.composite; package com.baiye.design.pattern.structural.composite;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {

@ -1,4 +1,4 @@
package com.baiye.design.structural.decorator.v1; package com.baiye.design.pattern.structural.decorator.v1;
public class Battercake { public class Battercake {

@ -1,4 +1,4 @@
package com.baiye.design.structural.decorator.v1; package com.baiye.design.pattern.structural.decorator.v1;
public class BattercakeWithEgg extends Battercake{ public class BattercakeWithEgg extends Battercake{

@ -1,4 +1,4 @@
package com.baiye.design.structural.decorator.v1; package com.baiye.design.pattern.structural.decorator.v1;
public class BattercakeWithEggSausage extends BattercakeWithEgg{ public class BattercakeWithEggSausage extends BattercakeWithEgg{

@ -1,4 +1,4 @@
package com.baiye.design.structural.decorator.v1; package com.baiye.design.pattern.structural.decorator.v1;
public class Test { public class Test {

@ -1,4 +1,4 @@
package com.baiye.design.structural.decorator.v2; package com.baiye.design.pattern.structural.decorator.v2;
public abstract class ABattercake { public abstract class ABattercake {
protected abstract String getDesc(); protected abstract String getDesc();

@ -1,4 +1,4 @@
package com.baiye.design.structural.decorator.v2; package com.baiye.design.pattern.structural.decorator.v2;
/** /**
* @author Administrator * @author Administrator

@ -1,4 +1,4 @@
package com.baiye.design.structural.decorator.v2; package com.baiye.design.pattern.structural.decorator.v2;
/** /**
* , * ,

@ -1,4 +1,4 @@
package com.baiye.design.structural.decorator.v2; package com.baiye.design.pattern.structural.decorator.v2;
public class Battercake extends ABattercake{ public class Battercake extends ABattercake{
@Override @Override

@ -1,4 +1,4 @@
package com.baiye.design.structural.decorator.v2; package com.baiye.design.pattern.structural.decorator.v2;
public class EggDecorator extends AbstractDecorator{ public class EggDecorator extends AbstractDecorator{

@ -1,4 +1,4 @@
package com.baiye.design.structural.decorator.v2; package com.baiye.design.pattern.structural.decorator.v2;
public class SausageDecorator extends AbstractDecorator{ public class SausageDecorator extends AbstractDecorator{
public SausageDecorator(ABattercake aBattercake) { public SausageDecorator(ABattercake aBattercake) {

@ -1,4 +1,4 @@
package com.baiye.design.structural.decorator.v2; package com.baiye.design.pattern.structural.decorator.v2;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {

@ -0,0 +1,21 @@
package com.baiye.design.pattern.structural.facade;
public class GiftExchangeService {
// 注入子系统服务
private QualifyService qualifyService = new QualifyService();
private PointsPaymentService pointsPaymentService = new PointsPaymentService();
private ShippingService shippingService = new ShippingService();
public void giftExchange(PointsGift pointsGift) {
if (qualifyService.isAvailable(pointsGift)) {
// 资格校验通过
if (pointsPaymentService.pay(pointsGift)) {
// 如果支付积分成功
String shippingOrderNo = shippingService.shipGift(pointsGift);
System.out.println("物流系统下单成功,订单号是: " + shippingOrderNo);
}
}
}
}

@ -0,0 +1,13 @@
package com.baiye.design.pattern.structural.facade;
public class PointsGift {
private String name;
public PointsGift(String name) {
this.name = name;
}
public String getName() {
return name;
}
}

@ -0,0 +1,10 @@
package com.baiye.design.pattern.structural.facade;
public class PointsPaymentService {
public boolean pay(PointsGift pointsGift) {
// 扣减积分
System.out.println("支付" + pointsGift.getName() + "积分成功");
return true;
}
}

@ -0,0 +1,12 @@
package com.baiye.design.pattern.structural.facade;
/**
*
*/
public class QualifyService {
public boolean isAvailable(PointsGift pointsGift) {
System.out.println("校验" + pointsGift.getName() + "积分兑换资格通过,库存通过");
return true;
}
}

@ -0,0 +1,10 @@
package com.baiye.design.pattern.structural.facade;
public class ShippingService {
public String shipGift(PointsGift pointsGift) {
// 物流系统的对接逻辑
System.out.println(pointsGift.getName() + "进入物流系统");
String shippingOrderNo = "666";
return shippingOrderNo;
}
}

@ -0,0 +1,14 @@
package com.baiye.design.pattern.structural.facade;
public class Test {
public static void main(String[] args) {
PointsGift t = new PointsGift("T");
GiftExchangeService giftExchangeService = new GiftExchangeService();
// giftExchangeService.setQualifyService(new QualifyService());
// giftExchangeService.setPointsPaymentService(new PointsPaymentService());
// giftExchangeService.setShippingService(new ShippingService());
giftExchangeService.giftExchange(t);
}
}

@ -0,0 +1,5 @@
package com.baiye.design.pattern.structural.flyweight;
public interface Employee {
void reprot();
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save