设计模式
单例模式
- 某个类只能有一个实例
- 它必须自行创建这一个实例
- 它必须自行向整个系统提供这个实例
饿汉式(由于调用时 对象已经在构造方法之前加载 耗资源)
class SignleTon{
private static SignleTon s1=new SignleTon();
private SignleTon() {
System.out.println("SignleTon");
}
public static SignleTon getSignleTon() {
return s1;
}
}
懒汉式
class SignleTon{
private static SignleTon s1=null;
private SignleTon() {
System.out.println("SignleTon");
}
public static SignleTon getSignleTon() {
if (s1==null) {
s1=new SignleTon();
}
return s1;
}
}
模板方法模式
定义:一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供具体行为
package com.tanlei.newer;
public class TemplateDemo {
public static void main(String[] args) {
Template t=new pteacher();
t.work();
Template o=new oteacher();
o.work();
}
}
abstract class Template {
// 老师工作方法 流程
// 模板方法
public void work() {
// 1.授课前准备
prepared();
// 2.讲课
teaching();
// 3.结束
end();
}
public void prepared() {
System.out.println("准备");
}
public void end() {
System.out.println("结束");
}
public abstract void teaching();
}
class pteacher extends Template{
//对抽象父类的抽象方法实现
@Override
public void teaching() {
System.out.println("数据库老师开始讲课");
}
}
class oteacher extends Template{
@Override
public void teaching() {
System.out.println("java老师开始讲课");
}
}
简单工厂设计模式
定义:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类或接口
意图:提供一个类,有它负责根据一定的条件创建某一具体类的实例
package com.tanlei.newer;
public class FactoryDemo {
public static void main(String[] args) {
IFrite ifFrite=Factory.getFrite("苹果");
if(ifFrite!=null) {
System.out.println(ifFrite.get());
}else {
System.out.println("error");
}
}
}
interface IFrite{
public String get();
}
//工厂类
class Factory{
public static IFrite getFrite(String name) {
if (name.equals("苹果")) {
return new APPle();
}else if(name.equals("橘子")){
return new Orage();
}else {
return null;
}
}
}
class APPle implements IFrite{
@Override
public String get() {
return "采摘苹果";
}
}
class Orage implements IFrite{
@Override
public String get() {
return "采摘橘子";
}
}
策略模式
定义:是对算法的包装,把使用算法的责任和算法本身分割开,委派给不同的对象管理
package com.tanlei.newer;
public class StrategyDemo {
public static void main(String[] args) {
int [] array= {2,10,30,4,6,7,8};
ISort sort=new Maopao();
Context context=new Context(sort);
context.sort(array);
context.printArray(array);
System.out.println("*************");
ISort sort1=new Xz();
Context context2=new Context(sort1);
context2.sort(array);
context2.printArray(array);
}
}
class Context{
private ISort isort=null;
public Context(ISort isort) {
this.isort=isort;
}
public void sort(int [] array) {
//交给具体接收到的策略类对象来帮帮忙排序
isort.sort(array);
}
//打印数组中的内容
public void printArray(int []array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
}
interface ISort{
public void sort(int [] array);
}
//封装了冒泡排序法
class Maopao implements ISort{
@Override
public void sort(int[] array) {
System.out.println("冒泡排序法");
for (int i = 0; i < array.length-1; i++) {
for (int j = 0; j < array.length-i-1; j++) {
if (array[j]>array[j+1]) {
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
}
}
//封装了选择排序法
class Xz implements ISort{
@Override
public void sort(int[] array) {
System.out.println("选择排序法");
int min=0;
for (int i = 0; i < array.length; i++) {
min=i;
for (int j =i+1; j < array.length; j++) {
if(array[min]>array[j]) {
min=j;
}
}
if (i!=min) {
int temp=array[i];
array[i]=array[min];
array[min]=temp;
}
}
}
}


浙公网安备 33010602011771号