1、单例模式
1.1
package com.yqj.pattern.singleton.type01;
public class Singleton01 {
public static void main(String[] args) {
Singleton instance = Singleton.getInstance();
Singleton instance2 = Singleton.getInstance();
System.out.println(instance == instance2);
}
}
class Singleton{
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance(){
return instance;
}
}
1.2
package com.yqj.pattern.singleton.type02;
public class Singleton02 {
public static void main(String[] args) {
Singleton instance = Singleton.getInstance();
Singleton instance2 = Singleton.getInstance();
System.out.println(instance == instance2);
}
}
class Singleton {
private static Singleton instance;
static {
instance = new Singleton();
}
private Singleton() {}
public static Singleton getInstance(){
return instance;
}
}
1.3
package com.yqj.pattern.singleton.type03;
public class Singleton03 {
public static void main(String[] args) {
Singleton instance = Singleton.getInstance();
Singleton instance2 = Singleton.getInstance();
System.out.println(instance == instance2);
}
}
class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
1.4
package com.yqj.pattern.singleton.type04;
public class Singleton04 {
public static void main(String[] args) {
Singleton instance = Singleton.getInstance();
Singleton instance2 = Singleton.getInstance();
System.out.println(instance == instance2);
}
}
class Singleton{
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance(){
if(instance == null){
synchronized (Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
1.5
package com.yqj.pattern.singleton.type05;
public class Singleton05 {
public static void main(String[] args) {
Singleton instance = Singleton.getInstance();
Singleton instance2 = Singleton.getInstance();
System.out.println(instance == instance2);
}
}
class Singleton{
private static Singleton instance;
private Singleton() {}
private static class SingletonInstance{
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance(){
return SingletonInstance.INSTANCE;
}
}
1.6
package com.yqj.pattern.singleton.type06;
public class Singleton06 {
public static void main(String[] args) {
Singleton instance = Singleton.INSTANCE;
Singleton instance2 = Singleton.INSTANCE;
System.out.println(instance == instance2);
instance.doSomething();
}
}
enum Singleton{
INSTANCE;
public void doSomething(){
System.out.println("Hello World");
}
}
2、工厂模式
2.1简单工厂
package com.yqj.pattern.factory.simpleFactory.improve.order;
import com.yqj.pattern.factory.simpleFactory.improve.pizza.Pizza;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class OrderPizza {
Pizza pizza = null;
SimpleFactory factory = null;
public OrderPizza(SimpleFactory factory){
setFactory(factory);
}
public void setFactory(SimpleFactory factory){
this.factory = factory;
String orderType;
do{
orderType = getOrderType();
pizza = this.factory.getFactory(orderType);
if(pizza != null){
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
}else {
System.out.println("订购披萨失败");
break;
}
}while (true);
}
private String getOrderType(){
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("input pizza type: ");
String orderType = bufferedReader.readLine();
return orderType;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
public static void main(String[] args) {
new OrderPizza(new SimpleFactory());
}
}
package com.yqj.pattern.factory.simpleFactory.improve.order;
import com.yqj.pattern.factory.simpleFactory.improve.pizza.CheesePizza;
import com.yqj.pattern.factory.simpleFactory.improve.pizza.GreekPizza;
import com.yqj.pattern.factory.simpleFactory.improve.pizza.Pizza;
public class SimpleFactory {
public Pizza getFactory(String orderType){
Pizza pizza = null;
if("cheese".equals(orderType)){
pizza = new CheesePizza();
} else if ("greek".equals(orderType)){
pizza = new GreekPizza();
}
return pizza;
}
}
package com.yqj.pattern.factory.simpleFactory.improve.pizza;
public class CheesePizza extends Pizza {
@Override
public void prepare() {
setPizzaName("希腊pizza");
System.out.println(pizzaName+"准备制作");
}
}
package com.yqj.pattern.factory.simpleFactory.improve.pizza;
public class GreekPizza extends Pizza {
@Override
public void prepare() {
setPizzaName("奶酪pizza");
System.out.println(pizzaName + "准备制作");
}
}
package com.yqj.pattern.factory.simpleFactory.improve.pizza;
public abstract class Pizza {
protected String pizzaName;
public void setPizzaName(String pizzaName) {
this.pizzaName = pizzaName;
}
public abstract void prepare();
public void bake() {
System.out.println(pizzaName + "烘焙披萨");
}
public void cut() {
System.out.println(pizzaName + "切披萨");
}
public void box() {
System.out.println(pizzaName + "打包披萨");
}
}
package com.yqj.pattern.factory.simpleFactory.staticimprove.order;
import com.yqj.pattern.factory.simpleFactory.staticimprove.pizza.Pizza;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class OrderPizza {
Pizza pizza = null;
public OrderPizza(){
setFactory();
}
public void setFactory(){
String orderType;
do{
orderType = getOrderType();
pizza = SimpleStaticFactory.getFactory(orderType);
if(pizza != null){
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
}else {
System.out.println("订购披萨失败");
break;
}
}while (true);
}
private String getOrderType(){
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("input pizza type: ");
String orderType = bufferedReader.readLine();
return orderType;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
public static void main(String[] args) {
new OrderPizza();
}
}
package com.yqj.pattern.factory.simpleFactory.staticimprove.order;
import com.yqj.pattern.factory.simpleFactory.staticimprove.pizza.CheesePizza;
import com.yqj.pattern.factory.simpleFactory.staticimprove.pizza.GreekPizza;
import com.yqj.pattern.factory.simpleFactory.staticimprove.pizza.Pizza;
public class SimpleStaticFactory {
public static Pizza getFactory(String orderType){
Pizza pizza = null;
if("cheese".equals(orderType)){
pizza = new CheesePizza();
} else if ("greek".equals(orderType)){
pizza = new GreekPizza();
}
return pizza;
}
}
package com.yqj.pattern.factory.simpleFactory.staticimprove.pizza;
public class CheesePizza extends Pizza {
@Override
public void prepare() {
setPizzaName("希腊pizza");
System.out.println(pizzaName+"准备制作");
}
}
package com.yqj.pattern.factory.simpleFactory.staticimprove.pizza;
public class GreekPizza extends Pizza {
@Override
public void prepare() {
setPizzaName("奶酪pizza");
System.out.println(pizzaName + "准备制作");
}
}
package com.yqj.pattern.factory.simpleFactory.staticimprove.pizza;
public abstract class Pizza {
protected String pizzaName;
public void setPizzaName(String pizzaName) {
this.pizzaName = pizzaName;
}
public abstract void prepare();
public void bake() {
System.out.println(pizzaName + "烘焙披萨");
}
public void cut() {
System.out.println(pizzaName + "切披萨");
}
public void box() {
System.out.println(pizzaName + "打包披萨");
}
}
package com.yqj.pattern.factory.simpleFactory.triditional.order;
import com.yqj.pattern.factory.simpleFactory.improve.pizza.CheesePizza;
import com.yqj.pattern.factory.simpleFactory.improve.pizza.GreekPizza;
import com.yqj.pattern.factory.simpleFactory.improve.pizza.Pizza;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class OrderPizza {
Pizza pizza = null;
String orderType = null;
public OrderPizza(){
do {
orderType = getOrderType();
if("cheese".equals(orderType)){
pizza = new CheesePizza();
} else if ("greek".equals(orderType)){
pizza = new GreekPizza();
} else {
break;
}
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
} while (true);
}
private String getOrderType(){
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("input pizza type: ");
String orderType = bufferedReader.readLine();
return orderType;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
public static void main(String[] args) {
new OrderPizza();
}
}
package com.yqj.pattern.factory.simpleFactory.triditional.pizza;
public class CheesePizza extends Pizza {
@Override
public void prepare() {
setPizzaName("希腊pizza");
System.out.println(pizzaName+"准备制作");
}
}
package com.yqj.pattern.factory.simpleFactory.triditional.pizza;
public class GreekPizza extends Pizza {
@Override
public void prepare() {
setPizzaName("奶酪pizza");
System.out.println(pizzaName + "准备制作");
}
}
package com.yqj.pattern.factory.simpleFactory.triditional.pizza;
public abstract class Pizza {
protected String pizzaName;
public void setPizzaName(String pizzaName) {
this.pizzaName = pizzaName;
}
public abstract void prepare();
public void bake() {
System.out.println(pizzaName + "烘焙披萨");
}
public void cut() {
System.out.println(pizzaName + "切披萨");
}
public void box() {
System.out.println(pizzaName + "打包披萨");
}
}
2.2、工厂方法
package com.yqj.pattern.factory.factorymethod.order;
import com.yqj.pattern.factory.factorymethod.pizza.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class BJOrderPizza extends OrderPizza{
@Override
public Pizza createPizza(String orderType) {
Pizza pizza = null;
if("cheese".equals(orderType)){
pizza = new BJCheesePizza();
} else if("greek".equals(orderType)){
pizza = new BJGreekPizza();
}
return pizza;
}
}
class LDOrderPizza extends OrderPizza{
@Override
public Pizza createPizza(String orderType) {
Pizza pizza = null;
if("cheese".equals(orderType)){
pizza = new LDCheesePizza();
}else if("greek".equals(orderType)){
pizza = new LDGreekPizza();
}
return pizza;
}
}
public abstract class OrderPizza {
public abstract Pizza createPizza(String orderType);
public OrderPizza(){
Pizza pizza = null;
do{
String orderType = getOrderType();
pizza = createPizza(orderType);
if(pizza!=null){
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
} else {
System.out.println("订购失败");
break;
}
}while (true);
}
private String getOrderType(){
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("input pizza type: ");
String orderType = bufferedReader.readLine();
return orderType;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
public static void main(String[] args) {
new BJOrderPizza();
}
}
package com.yqj.pattern.factory.factorymethod.order;
import com.yqj.pattern.factory.factorymethod.pizza.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class BJOrderPizza extends OrderPizza{
@Override
public Pizza createPizza(String orderType) {
Pizza pizza = null;
if("cheese".equals(orderType)){
pizza = new BJCheesePizza();
} else if("greek".equals(orderType)){
pizza = new BJGreekPizza();
}
return pizza;
}
}
class LDOrderPizza extends OrderPizza{
@Override
public Pizza createPizza(String orderType) {
Pizza pizza = null;
if("cheese".equals(orderType)){
pizza = new LDCheesePizza();
}else if("greek".equals(orderType)){
pizza = new LDGreekPizza();
}
return pizza;
}
}
public abstract class OrderPizza {
public abstract Pizza createPizza(String orderType);
public OrderPizza(){
Pizza pizza = null;
do{
String orderType = getOrderType();
pizza = createPizza(orderType);
if(pizza!=null){
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
} else {
System.out.println("订购失败");
break;
}
}while (true);
}
private String getOrderType(){
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("input pizza type: ");
String orderType = bufferedReader.readLine();
return orderType;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
public static void main(String[] args) {
new BJOrderPizza();
}
}
package com.yqj.pattern.factory.factorymethod.order;
import com.yqj.pattern.factory.factorymethod.pizza.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class BJOrderPizza extends OrderPizza{
@Override
public Pizza createPizza(String orderType) {
Pizza pizza = null;
if("cheese".equals(orderType)){
pizza = new BJCheesePizza();
} else if("greek".equals(orderType)){
pizza = new BJGreekPizza();
}
return pizza;
}
}
class LDOrderPizza extends OrderPizza{
@Override
public Pizza createPizza(String orderType) {
Pizza pizza = null;
if("cheese".equals(orderType)){
pizza = new LDCheesePizza();
}else if("greek".equals(orderType)){
pizza = new LDGreekPizza();
}
return pizza;
}
}
public abstract class OrderPizza {
public abstract Pizza createPizza(String orderType);
public OrderPizza(){
Pizza pizza = null;
do{
String orderType = getOrderType();
pizza = createPizza(orderType);
if(pizza!=null){
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
} else {
System.out.println("订购失败");
break;
}
}while (true);
}
private String getOrderType(){
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("input pizza type: ");
String orderType = bufferedReader.readLine();
return orderType;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
public static void main(String[] args) {
new BJOrderPizza();
}
}
package com.yqj.pattern.factory.factorymethod.pizza;
public class BJCheesePizza extends Pizza {
@Override
public void prepare() {
setPizzaName("北京奶酪pizza");
System.out.println(pizzaName+"准备制作");
}
}
package com.yqj.pattern.factory.factorymethod.pizza;
public class BJGreekPizza extends Pizza {
@Override
public void prepare() {
setPizzaName("北京希腊pizza");
System.out.println(pizzaName + "准备制作");
}
}
package com.yqj.pattern.factory.factorymethod.pizza;
public class LDCheesePizza extends Pizza {
@Override
public void prepare() {
setPizzaName("伦敦奶酪pizza");
System.out.println(pizzaName + "准备制作");
}
}
package com.yqj.pattern.factory.factorymethod.pizza;
public class LDGreekPizza extends Pizza {
@Override
public void prepare() {
setPizzaName("伦敦希腊pizza");
System.out.println(pizzaName + "准备制作");
}
}
package com.yqj.pattern.factory.factorymethod.pizza;
public abstract class Pizza {
protected String pizzaName;
public void setPizzaName(String pizzaName) {
this.pizzaName = pizzaName;
}
public abstract void prepare();
public void bake() {
System.out.println(pizzaName + "烘焙披萨");
}
public void cut() {
System.out.println(pizzaName + "切披萨");
}
public void box() {
System.out.println(pizzaName + "打包披萨");
}
}
2.3、抽象工厂
package com.yqj.pattern.factory.abstractfactory.order;
import com.yqj.pattern.factory.abstractfactory.pizza.Pizza;
public interface AbsFactory {
Pizza createPizza(String orderType);
}
package com.yqj.pattern.factory.abstractfactory.order;
import com.yqj.pattern.factory.abstractfactory.pizza.BJCheesePizza;
import com.yqj.pattern.factory.abstractfactory.pizza.BJGreekPizza;
import com.yqj.pattern.factory.abstractfactory.pizza.Pizza;
public class BJFactory implements AbsFactory {
@Override
public Pizza createPizza(String orderType) {
Pizza pizza = null;
if("cheese".equals(orderType)){
pizza = new BJCheesePizza();
}else if("greek".equals(orderType)){
pizza = new BJGreekPizza();
}
return pizza;
}
}
package com.yqj.pattern.factory.abstractfactory.order;
import com.yqj.pattern.factory.abstractfactory.pizza.LDCheesePizza;
import com.yqj.pattern.factory.abstractfactory.pizza.LDGreekPizza;
import com.yqj.pattern.factory.abstractfactory.pizza.Pizza;
public class LDFactory implements AbsFactory {
@Override
public Pizza createPizza(String orderType) {
Pizza pizza = null;
if("cheese".equals(orderType)){
pizza = new LDCheesePizza();
}else if("greek".equals(orderType)){
pizza = new LDGreekPizza();
}
return pizza;
}
}
package com.yqj.pattern.factory.abstractfactory.order;
import com.yqj.pattern.factory.abstractfactory.pizza.Pizza;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class OrderPizza {
AbsFactory factory;
public OrderPizza(AbsFactory factory){
setFactory(factory);
}
public void setFactory(AbsFactory factory){
this.factory = factory;
Pizza pizza = null;
do{
String orderType = getOrderType();
pizza = this.factory.createPizza(orderType);
if(pizza!=null){
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
}else {
System.out.println("订购失败");
break;
}
}while (true);
}
private String getOrderType(){
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("input pizza type: ");
String orderType = bufferedReader.readLine();
return orderType;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
public static void main(String[] args) {
new OrderPizza(new BJFactory());
}
}
package com.yqj.pattern.factory.abstractfactory.pizza;
public class BJCheesePizza extends Pizza {
@Override
public void prepare() {
setPizzaName("北京奶酪pizza");
System.out.println(pizzaName+"准备制作");
}
}
package com.yqj.pattern.factory.abstractfactory.pizza;
public class BJGreekPizza extends Pizza {
@Override
public void prepare() {
setPizzaName("北京希腊pizza");
System.out.println(pizzaName + "准备制作");
}
}
package com.yqj.pattern.factory.abstractfactory.pizza;
public class LDCheesePizza extends Pizza {
@Override
public void prepare() {
setPizzaName("伦敦奶酪pizza");
System.out.println(pizzaName + "准备制作");
}
}
package com.yqj.pattern.factory.abstractfactory.pizza;
public class LDGreekPizza extends Pizza {
@Override
public void prepare() {
setPizzaName("伦敦希腊pizza");
System.out.println(pizzaName + "准备制作");
}
}
package com.yqj.pattern.factory.abstractfactory.pizza;
public abstract class Pizza {
protected String pizzaName;
public void setPizzaName(String pizzaName) {
this.pizzaName = pizzaName;
}
public abstract void prepare();
public void bake() {
System.out.println(pizzaName + "烘焙披萨");
}
public void cut() {
System.out.println(pizzaName + "切披萨");
}
public void box() {
System.out.println(pizzaName + "打包披萨");
}
}