Java教程 第88页

Java 访问者模式

Java设计模式 – 访问者模式 在访问者模式中,元素对象接受访问者对象,而访问者对象处理元素对象上的操作。 此模式是一种行为模式。 通过这种方式,可以从不同的访问者改变元素的执行算法。 例子 class TreeNode { private String name; public TreeNode(String name) { this.name = name; } public String getName() { return name; } public void accept(NodeVisitor v) { v.visit(this); } } interface NodeVisitor { public void visit(TreeNode n); } class ConsoleVisitor implements NodeVisitor { @Override public void visit(TreeNode n) { System.out.println("console:" + n.getName()); } } class EmailVisitor implements NodeVisitor { @Override public void visit(TreeNode n) { System.out.println("email:" + n.getName()); } } public class Main { public static void main(String[] args) { TreeNode computer = new TreeNode("w3cschool.cn"); computer.accept(new ConsoleVisitor()); computer.accept(new EmailVisitor()); } } 上面的代码生成以下结果。 console:w3cschool.cn email:w3cschool.cn

Java 访问级别

Java面向对象设计 – Java访问级别 类简单名称是 class 关键字和 {)之间的名称。 当我们通过简单的名称引用一个类时,编译器在引用类所在的同一个包中查找该类声明。 我们可以使用全名来引用一个类如下。 com.w3cschool.Dog aDog; 指定类的访问级别的一般语法是 <access level modifier>class <class name> { // Body of the class } 类声明中<access level modifier>只有两个有效值: no value public 没有值被称为包级别访问。具有包级别访问的类只能在声明它的包中访问。 具有公共访问级别修改器的类可以从应用程序中的任何包访问。 package com.w3cschool; public class Dog { }

Java 数据访问对象模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 数据访问对象模式

Java设计模式 – 数据访问对象模式 数据访问对象模式或DAO模式将数据访问API与高级业务服务分离。 DAO模式通常具有以下接口和类。 数据访问对象接口定义模型对象的标准操作。 数据访问对象类实现以上接口。可能有多个实现,例如,一个用于数据库,一个用于文件。 模型对象简单的POJO包含get/set方法来存储数据。 例子 import java.util.ArrayList; import java.util.List; class Employee { private String name; private int id; Employee(String name, int id) { this.name = name; this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } } interface EmployeeDao { public List<Employee> getAll(); public Employee get(int id); public void updateStudent(Employee student); public void delete(Employee student); } class EmployeeDaoImpl implements EmployeeDao { List<Employee> employeeList; public EmployeeDaoImpl() { employeeList = new ArrayList<Employee>(); Employee emp1 = new Employee("Jack", 0); Employee emp2 = new Employee("Tom", 1); employeeList.add(emp1); employeeList.add(emp2); } @Override public void delete(Employee student)...

Java 模板方法模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 模板方法模式

Java设计模式 – 模板方法模式 在模板模式中,父抽象类公开几个抽象方法供子类实现。在父抽象类中有另一个方法或几个方法使用抽象方法来实现业务逻辑。 抽象方法通常用于父类所需的每个步骤。 例如,为了使用新的软件,我们需要下载,安装,配置和运行。如果我们要使用模板模式来编码逻辑,我们将创建一个父类如下。 abstract class UseSoftware{ abstract void download(); abstract void install(); abstract void configuration(); abstract void run(); public void useNewSoftware(){ download(); install(); configuration(); run(); } } 对于使用不同的软件,我们只需要从上面的抽象类继承并提供详细的实现。 模板模式是一种行为模式。 例子 abstract class Software { abstract void initialize(); abstract void start(); abstract void end(); //template method public final void play(){ //initialize initialize(); //start start(); //end end(); } } class Browser extends Software { @Override void end() { System.out.println("Browser Finished!"); } @Override void initialize() { System.out.println("Browser Initialized!."); } @Override void start() { System.out.println("Browser Started."); } } class Editor extends Software { @Override void end() { System.out.println("Editor Finished!"); } @Override void initialize() { System.out.println("Editor Initialized!"); } @Override void start() { System.out.println("Editor Started!"); } } public class Main { public static...

Java 策略模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 策略模式

 Java设计模式 – 战略模式 在策略模式中,可以在运行时更改算法。 策略模式是一种行为模式。 在策略模式中,我们创建表示各种算法的对象和运行算法的上下文对象。 策略对象更改上下文对象上的算法。 例子 interface MathAlgorithm { public int calculate(int num1, int num2); } class MathAdd implements MathAlgorithm{ @Override public int calculate(int num1, int num2) { return num1 + num2; } } class MathSubstract implements MathAlgorithm{ @Override public int calculate(int num1, int num2) { return num1 - num2; } } class MathMultiply implements MathAlgorithm{ @Override public int calculate(int num1, int num2) { return num1 * num2; } } class MathContext { private MathAlgorithm algorithm; public MathContext(MathAlgorithm strategy){ this.algorithm = strategy; } public int execute(int num1, int num2){ return algorithm.calculate(num1, num2); } } public class Main { public static void main(String[] args) { MathContext context = new MathContext(new MathAdd()); System.out.println("10 + 5 = " + context.execute(10, 5));...

Java 空对象模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 空对象模式

Java设计模式 – 空对象模式 在空对象模式中,创建一个无业务对象,包括 null 对象。 我们使用无业务对象来替换空指针检查。 我们称之为一个无业务的对象Null对象。 Null对象在数据不可用时提供默认行为。 在空对象模式中,我们通常创建一个抽象类来指定各种操作。 Null Object和具体类都将扩展这个抽象类。 Null Object类只提供空逻辑。 例子 abstract class AbstractEmployee { protected String name; public abstract boolean isNull(); public abstract String getName(); } class Programmer extends AbstractEmployee { public Programmer(String name) { this.name = name; } @Override public String getName() { return name; } @Override public boolean isNull() { return false; } } class NullCustomer extends AbstractEmployee { @Override public String getName() { return "Not Available"; } @Override public boolean isNull() { return true; } } class EmployeeFactory { public static final String[] names = {"Rob", "Joe", "Jack"}; public static AbstractEmployee getCustomer(String name){ for (int i = 0; i < names.length; i++) { if (names[i].equalsIgnoreCase(name)){ return new Programmer(name); } } return new...

Java 状态模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 状态模式

Java设计模式 – 状态模式 在状态模式中,类行为基于其状态而改变。 状态模式是一种行为模式。 当使用状态模式时,我们创建各种状态对象和上下文对象,其行为随着其状态对象改变而变化。 例子 interface State { public void doAction(Context context); } class StartState implements State { public void doAction(Context context) { System.out.println("In start state"); context.setState(this); } public String toString() { return "Start State"; } } class StopState implements State { public void doAction(Context context) { System.out.println("In stop state"); context.setState(this); } public String toString() { return "Stop State"; } } class PlayState implements State { public void doAction(Context context) { System.out.println("In play state"); context.setState(this); } public String toString() { return "Play State"; } } class Context { private State state; public Context() { state = null; } public void setState(State state) { this.state = state; } public State getState() { return state; } } public class Main...

Java 中介者模式

Java设计模式 – 中介者模式 中介者模式减少多个对象之间的通信。 此模式提供了一个处理不同类之间的所有通信的中介类。 中介者模式属于行为模式类别。 例子 class Printer { public static void showMessage(Machine user, String message){ System.out.println(new java.util.Date().toString() + " [" + user.getName() +"] : " + message); } } class Machine { private String name; public Machine(String name){ this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void sendMessage(String message){ Printer.showMessage(this,message); } } class Main { public static void main(String[] args) { Machine m1= new Machine("M1"); Machine m2 = new Machine("M2"); m1.sendMessage("Rebooting"); m2.sendMessage("Computing"); } }

Java 单例模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 单例模式

Java设计模式 – 单例模式 单例模式是一种创建模式。 这种模式只涉及一个单独的类,它负责创建自己的对象。 该类确保只创建单个对象。 这个类提供了一种访问其唯一对象的方法。 例如,当设计一个用户界面时,我们可能只有一个主应用程序窗口。我们可以使用Singleton模式来确保只有一个MainApplicationWindow对象的实例。 例子 下面的代码将创建一个MainWindow类。 MainWindow类的构造函数是私有的,并且有一个自身的静态实例。 MainWindow类提供了一个静态方法来获取它的静态实例到外部世界。 Main,我们的演示类将使用MainWindow类来获取一个MainWindow对象。 class MainWindow { //create an object of MainWindow private static MainWindow instance = new MainWindow(); //make the constructor private so that this class cannot be //instantiated by other class private MainWindow(){} //Get the only object available public static MainWindow getInstance(){ return instance; } public void showMessage(){ System.out.println("Hello World!"); } } public class Main { public static void main(String[] args) { //Get the only object available MainWindow object = MainWindow.getInstance(); //show the message object.showMessage(); } } 上面的代码生成以下结果。

Java 适配器模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 适配器模式

 Java设计模式 – 适配器模式 我们在现实生活中使用适配器很多。例如,我们使用存储卡适配器连接存储卡和计算机,因为计算机仅支持一种类型的存储卡,并且我们的卡与计算机不兼容。 适配器是两个不兼容实体之间的转换器。适配器模式是一种结构模式。 在Java设计模式中,适配器模式作为两个不兼容接口之间的桥梁。 通过使用适配器模式,我们可以统一两个不兼容的接口。 例子 首先我们创建一个播放器界面来播放任何时间的媒体文件。 MyPlayer是适配器,它统一了播放媒体文件的接口。 interface Player { public void play(String type, String fileName); } interface AudioPlayer { public void playAudio(String fileName); } interface VideoPlayer { public void playVideo(String fileName); } class MyAudioPlayer implements AudioPlayer { @Override public void playAudio(String fileName) { System.out.println("Playing. Name: "+ fileName); } } class MyVideoPlayer implements VideoPlayer { @Override public void playVideo(String fileName) { System.out.println("Playing. Name: "+ fileName); } } class MyPlayer implements Player { AudioPlayer audioPlayer = new MyAudioPlayer(); VideoPlayer videoPlayer = new MyVideoPlayer(); public MyPlayer(){ } @Override public void play(String audioType, String fileName) { if(audioType.equalsIgnoreCase("avi")){ videoPlayer.playVideo(fileName); }else if(audioType.equalsIgnoreCase("mp3")){ audioPlayer.playAudio(fileName); } } } public class Main{ public static void main(String[] args) { MyPlayer myPlayer = new MyPlayer(); myPlayer.play("mp3", "h.mp3");...